

次のようなJSONがあります。

[code]

    {
      "firstName": "John",
      "lastName" : "doe",
      "age"      : 26,
      "address"  : {
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
      },
      "phoneNumbers": [
        {
          "type"  : "iPhone",
          "number": "0123-4567-8888"
        },
        {
          "type"  : "home",
          "number": "0123-4567-8910"
        }
      ]
    }
    
[/code]

### 行いたいこと

次のような結果、配列の各要素中の複数項目の値を一行ずつ出力するJSONPathはないでしょうか？

[code]

    [
      iPhone,0123-4567-8888
      home,0123-4567-88910
    ]
    
[/code]

### 試したこと

次のようなJSONPathを用いましたが、結果は項目毎で1行となり、期待した結果は得られませんでした。

・試行したJSONPath

[code]

    $.phoneNumbers[*].[type,number]
    
[/code]

・結果

[code]

    [
      "iPhone",
      "0123-4567-8888",
      "home",
      "0123-4567-8910"
    ]
    
[/code]

JSON中の配列要素に対する、繰り返し処理の記述が必要なのではないか、と考えておりますが、その方法がわからずにおります。  
どなたかご教示いただけますと幸いです。よろしくお願いいたします。


CC BY-SA 4.0
2021-02-12T03:03:24.917
73944
2023-10-01T12:05:00.677
2021-02-12T03:16:04.953
3060
43926
question
json
JSONの配列から、各行の複数要素を一行ずつ取得したい


これでいかがでしょうか？

[code]

    //dataに格納しておきます。
    data = {
      "firstName": "John",
      "lastName" : "doe",
      "age"      : 26,
      "address"  : {
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
      },
      "phoneNumbers": [
        {
          "type"  : "iPhone",
          "number": "0123-4567-8888"
        },
        {
          "type"  : "home",
          "number": "0123-4567-8910"
        }
      ]
    }
    
    // dataから、phoneNumbersのみを選びます。
    source = data.phoneNumbers;
    
    // 要素ごとにループさせます。
    for(var value of source){
        // value.type value.numberで取り出せます。
        // 一回のループで、iPhoneとその番号。もう一回で、次のデータです。
        document.write("<span>" + value.type + "</span> : <span>" + value.number + "</span><br/>");
    }
    
[/code]


CC BY-SA 4.0
2021-02-14T07:29:03.407
73982
2021-02-14T07:29:03.407
43957
73944
answer


ご回答ありがとうございます。

今回はJavaから呼び出すスクリプトエンジン上のJavaScriptでの実行になります。

よって、jqやその他JSONPath用のライブラリ利用は不可となります。

また、JSONPathとして渡せる文字列は一つだけという実装要件があり、ループ文にも対応しておりません。

配列の要素毎に、複数項目を一行で取得する（行いたいことに記載したような形での取得）、JSONPathの記述方法があれば、と考えております。

おそらくは何らかのループなり一旦取得した結果の加工処理を挟まないと無理ではないか、と考えておりますが、もし可能なら一行／一発で取得できる記述方法があれば、ご教示お願いいたします。


CC BY-SA 4.0
2021-02-14T10:38:49.783
73988
2021-02-14T10:38:49.783
43927
73944
answer