Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中JSONArray迭代中的数组_Java_Json_Arrays - Fatal编程技术网

java中JSONArray迭代中的数组

java中JSONArray迭代中的数组,java,json,arrays,Java,Json,Arrays,我的Json是: { "Response": { "Asset": [ { "id": 2461, "name": "TestAsset7771", "model_name": "TestModel777", "serial_number": "TestAsset7771", "curren

我的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);
    }
}
JSONObject outerObject=新的JSONObject(jsonObj.toString());
JSONObject innerObject=outerObject.getJSONObject(“响应”);
JSONArray JSONArray=innerObject.getJSONArray(“资产”);
for(inti=0,size=jsonArray.length();i
对于内部数组-即当前数据,我得到的值如下:

名称=当前_数据, 值={“时间戳”:“,”名称”:“温度”,“值”:“?”}

如何放置另一个内部数组,以便获取 “timestamp”:“name”:“Temperature”,“value”:“?”在单独的变量中而不是完整的JSON中,“value”是另一个jason对象,因此您只需调用“getJasonObject()”即可获得该项,然后按常规处理该新数组

编辑:我做了一个失败(我的内存中没有足够的C0FFEE)并通过注释进行了更正。

值是另一个jason对象,因此您可以调用“getJasonObject()”来获取该项,然后按正常方式继续处理该新数组

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

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

  }
编辑:我犯了一个错误(我的内存中没有足够的C0FFEE),并通过注释进行了更正。

最好使用它来解析JSON。无论如何,如果您决定按此操作,请尝试:

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

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

  }
您有这样一个类:

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();
    }
  }
最好使用它来解析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();
    }
  }
JSONObject outerObject=新的JSONObject(jsonObj.toString());
JSONObject innerObject=outerObject.getJSONObject(“响应”);
JSONArray JSONArray=innerObject.getJSONArray(“资产”);
for(inti=0,size=jsonArray.length();i
JSONObject outerObject=新的JSONObject(jsonObj.toString());
JSONObject innerObject=outerObject.getJSONObject(“响应”);
JSONArray JSONArray=innerObject.getJSONArray(“资产”);
for(inti=0,size=jsonArray.length();i
//嵌套jsonarray

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

{

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

Iterato iterator=json1.iterator()

while(iterator.hasNext())

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

}

//嵌套jsonarray

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

{

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

Iterato iterator=json1.iterator()

while(iterator.hasNext())

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



}

嗯,“价值”是一张地图。从map中提取条目。value是json。如果上面的json列表是准确的,并且您使用了普通的json解析器,“current_data”的值将是一个map。对于特定的JSON解析器,您使用的映射形式将是JSONObject。访问元素就像访问其他地图一样。呃,“值”是一个地图。从map中提取条目。value是json。如果上面的json列表是准确的,并且您使用了普通的json解析器,“current_data”的值将是一个map。对于特定的JSON解析器,您使用的映射形式将是JSONObject。访问元素就像访问任何其他映射一样。实际上它是一个JSON对象->JSONObject->Map。是的,我发现COFFEE的值范围很窄——容易下溢和溢出。实际上它是一个JSON对象->JSONObject->Map。是的,我发现COFFEE的值范围很窄——容易下溢和溢出。为什么要迭代元素名而不是访问
objectInArray.getJSONObject(“当前_数据”)
??@HotLicks他/她编写的迭代不是针对“当前_数据”,而是针对其他元素。例如,只需查找“model_id”。除了为什么要迭代映射元素之外?你大概想要特定的值,而没有意义去检查你不想要的值。@HotLicks对不起,我没有理解你。怎么了?也许他想要所有的价值观,但这些价值观都是杂乱无章的。每个值都有一个含义,并与特定的程序变量相关联。只有当唯一目的是转储JSON内容时,迭代才有意义。为什么要迭代elementNames而不是只访问
objectInArray.getJSONObject(“当前_数据”)
??@HotLicks他/她编写的迭代不是针对“当前_数据”,而是针对其他元素。例如,只需查找“model_id”。除了为什么要迭代映射元素之外?你大概想要特定的值,而没有意义去检查你不想要的值。@HotLicks对不起,我没有理解你。怎么了?也许他想要所有的价值观,但这些价值观都是杂乱无章的。每个值都有一个含义,并与特定的程序变量相关联。只有当唯一的目的是转储JSON内容时,迭代才有意义。你不是先访问“当前数据”。你不是先访问“当前数据”。你至少应该解释一下你的代码是怎么做的。@Michałmiszczyzyn-这是你自己做的