Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 迭代JSON并从JSON获取字段_Java_Json_Loops - Fatal编程技术网

Java 迭代JSON并从JSON获取字段

Java 迭代JSON并从JSON获取字段,java,json,loops,Java,Json,Loops,我尝试过不同的解决方案,但我无法迭代这个JSON和/或直接获得特定的值 有人能帮忙吗 按顺序遍历所有字段 获取对某些字段的直接访问(例如,获取此响应时,直接访问“数据包计数”,其中其值等于3281) 我试着使用org.json,但是任何其他库都可以。试试这个 jObject = new JSONObject(contents.trim()); Iterator<?> keys = jObject.keys(); while( keys.hasNext() ) { S

我尝试过不同的解决方案,但我无法迭代这个JSON和/或直接获得特定的值

有人能帮忙吗

  • 按顺序遍历所有字段
  • 获取对某些字段的直接访问(例如,获取此响应时,直接访问
    “数据包计数”
    ,其中其值等于
    3281

我试着使用
org.json
,但是任何其他库都可以。

试试这个

jObject = new JSONObject(contents.trim());
Iterator<?> keys = jObject.keys();

while( keys.hasNext() ) {
     String key = (String)keys.next();
    if ( jObject.get(key) instanceof JSONObject ) {

    }
}
jObject=newjsonobject(contents.trim());
迭代器keys=jObject.keys();
while(keys.hasNext()){
字符串键=(字符串)键。下一步();
if(jObject.get(key)JSONObject实例){
}
}

要直接访问字段,可以使用ObjectMappet(com.fasterxml.jackson)从JSON字符串创建Java对象。例如:

ObjectMapper mapper = new ObjectMapper();
MyClass myClass = mapper.readValue(jsonString, MyClass.class);

您必须检查JSON对象的结构,并为遇到的实体创建相应的结构。例如,JSON对象中的第一件事是数组,因此这是您应该首先关心的事情。把它想象成一个连续的封装。有关更多信息,请查看下面的代码

JSONObject jobj = new JSONObject(stringJson);
JSONArray flowNodeInv = jobj.getJSONArray("flow-node-inventory:flow");
    for (int i = 0; i < flowNodeInv.length(); i++){
          JSONObject segment = (JSONObject) flowNodeInv.get(i);
          JSONObject stats = segment.getJSONObject("opendaylight-flow-statistics:flow-statistics");

        int number = stats.getInt("packet-count");

       System.out.println("packet-count: "+ number);}
JSONObject jobj=新的JSONObject(stringJson);
JSONArray flowNodeInv=jobj.getJSONArray(“流节点库存:流”);
对于(int i=0;i
尝试了这一点,但结果是,在“while”i get“flow节点inventory:flow(不带引号)中的第一次打印中,它从未进入“if”
JSONObject obj=new JSONObject(stringJson)中;obj=新的JSONObject(stringJson.trim());迭代器keys=obj.keys();while(keys.hasNext()){String key=(String)keys.next();System.out.println(key);if(obj.get(key)instanceof JSONObject){System.out.println(key);}}
它肯定不会进入if块,因为“flow node inventory:flow”的值是数组,而不是JSON对象。您需要迭代这个数组来处理剩余的数据。(很抱歉没有在我的答案中格式化代码,但我无法…)。那是我的问题。我没能做到。你能帮我一下吗?ThanksOk让我们深入探讨您的问题。您正在使用哪个JSON解析库?
JSONObject jobj = new JSONObject(stringJson);
JSONArray flowNodeInv = jobj.getJSONArray("flow-node-inventory:flow");
    for (int i = 0; i < flowNodeInv.length(); i++){
          JSONObject segment = (JSONObject) flowNodeInv.get(i);
          JSONObject stats = segment.getJSONObject("opendaylight-flow-statistics:flow-statistics");

        int number = stats.getInt("packet-count");

       System.out.println("packet-count: "+ number);}