2

私のJsonは:

{
    "Response": {
        "Asset": [
            {
                "id": 2461,
                "name": "TestAsset7771",
                "model_name": "TestModel777",
                "serial_number": "TestAsset7771",
                "current_data": {
                    "timestamp": "",
                    "name": "Temperature",
                    "value": "?"
                }
            },
            {
                "id": 2448,
                "model_id": 1229,
                "name": "TestAsset777",
                "model_name": "TestModel777",
                "serial_number": "TestAsset777",
                "current_data": {
                    "timestamp": "",
                    "name": "Temperature",
                    "value": "?"
                }
            }
        ]
    }
}

私のコードは次のとおりです。

JSONObject outerObject = new JSONObject(jsonObj.toString());
JSONObject innerObject = outerObject.getJSONObject("Response");
JSONArray jsonArray = innerObject.getJSONArray("Asset");
for (int i = 0, size = jsonArray.length(); i < size; i++)
{
    JSONObject objectInArray = jsonArray.getJSONObject(i);
    String[] elementNames = JSONObject.getNames(objectInArray)
    for (String elementName : elementNames)
    {
       String value = objectInArray.getString(elementName);
       System.out.printf("name=%s, value=%s\n", elementName, value);
    }
}

内部配列、つまり現在のデータの場合、値は次のように取得されます。

name=current_data, value={"timestamp":"","name":"Temperature","value":"?"}

"timestamp":"", "name":"Temperature", "value":"?" の値を取得できるように、別の内部配列を配置するにはどうすればよいですか? 完全な JSON ではなく個別の変数で

4

5 に答える 5

0
for (String elementName : elementNames)
  {
  JSONObject jsonobject = jsonarray.getJSONObject(elementName);

    System.out.printf( "name=%s, value=%s\n",jsonobject.getString("name"),jsonobject.getString("value"));

  }
于 2013-10-30T15:35:02.787 に答える
0

「値」は別の jason オブジェクトであるため、「getJasonObject()」を呼び出してアイテムを取得し、その新しい配列を通常どおりに処理できます。

編集:私は失敗しました(私の記憶に十分なC0FFEEがありません)、コメントのおかげで修正しました。

于 2013-10-30T15:30:38.967 に答える
0

Gsonを使用して JSON を解析することをお勧めします。とにかく、これに従うことにした場合は、次のように試してください。

次のようなクラスがあります。

class CurrentData{
  String name,timestamp,value;
  void print(){
    System.out.printf("name=%s, timestamp=%s, value=%s\n", name,timestamp, value);
  }
}

次に、for ループを次のように変更します。

 for (String elementName : elementNames)
  {
    if(!elementName.equals("current_data")){
    String value = objectInArray.getString(elementName);
    System.out.printf("name=%s, value=%s\n", elementName, value);
    }
    else{
    CurrentData obj=new CurrentData();// You can use array of objects declaring outside the loop as your need
    JSONObject curr_object=objectInArray.getJSONObject("current_data");
    obj.name=curr_object.getString("name");
    obj.timestamp=curr_object.getString("timestamp");
    obj.value=curr_object.getString("value");
    obj.print();
    }
  }
于 2013-10-30T15:39:00.570 に答える
-1
JSONObject outerObject = new JSONObject(jsonObj.toString());
JSONObject innerObject = outerObject.getJSONObject("Response");
JSONArray jsonArray = innerObject.getJSONArray("Asset");
for (int i = 0, size = jsonArray.length(); i < size; i++) {
    JSONObject objectInArray = jsonArray.getJSONObject(i);
    JSONObject currentData = objectInArray.getJSONObject("current_data");
    if (currentData != null) {
        String timestamp = currentData.getString("timestamp");
        String name = currentData.getString("name");
        String value = currentData.getString("value");
        // Assign above results to array elements or whatever
    }
}
于 2013-10-30T16:07:56.153 に答える
-2

//ネストされたjsonarray

FileReader inp=new FileReader("xyz.json");
JSONParser parser=new JSONParser();
Object obj=parser.parse(inp);
JSONArray jsonArray=(JSONArray) obj;
int len=jsonArray.size();

for(i:長さ)

{

JSONArray json1=(JSONArray) jsonArray.get(i);

イテレータ iterator=json1.iterator();

while(iterator.hasNext())

System.out.println(iterator.next());

}

于 2016-10-12T18:19:06.330 に答える