JSONSimple数组的关键查找器

时间:2016-02-18 05:47:40

标签: java arrays json json-simple

json-simple docs

上有一个非常好的KeyFinder示例

但是如果我试图获得一个数组,它只会返回第一个元素 的 JSON

{"foo": 
    {"bar": 
        {"foobar":{
        "items":["item1","item2","item3"]
                }
        }
    }
}

如果我使用keyFinder的例子并搜索“items”,我只能获得“item1”,而我希望能够使用整个数组。

keyFinder的功能示例/工作原理:

KeyFinder finder = new KeyFinder();
finder.setMatchKey("items"); 
try{
   while(!finder.isEnd()){
      if(finder.isFound)
        System.out.println("finder.getValue() -->" + finder.getValue()
    }
}//...

我目前的工作方式:

    Object obj = parser.parse(jsonText);
    JSONObject jsonObject = (JSONObject) obj;
    JSONObject jsonTags = (JSONObject) ((JSONObject) ((JSONObject) jsonObject.get("foo")).get("bar")).get("foobar");
    String tags = (String) jsonTags.get("items").toString().replaceAll("[^A-Za-z0-9,]","");
    String[] vaca = tags.split(",");
    for(String s : vaca) {
        list.add(s);
        System.out.println(s);
    }

我的问题是如何在不知道“path”的情况下获取数组foo>> bar>> foob​​ar通过其键获取“items”数组。

1 个答案:

答案 0 :(得分:0)

它会给你完整的数组。你犯的一个错误是你没有在foo中包裹barfoobar""。它应该是这样的:

{"foo": 
    {"bar": 
        {"foobar":{
        "items":["item1","item2","item3"]
                }
        }
    }
}

我尝试了你的代码

JSONParser parser = new JSONParser();
Object obj = parser.parse(jsonText);
JSONObject jsonObject = (JSONObject) obj;
JSONObject jsonTags = (JSONObject) ((JSONObject) ((JSONObject) jsonObject.get("foo")).get("bar")).get("foobar");
String tags = (String) jsonTags.get("items").toString().replaceAll("[^A-Za-z0-9,]","");
String[] vaca = tags.split(",");
List<String> list = new ArrayList<>();
for(String s : vaca) {
    list.add(s);
    System.out.println(s);
}

输出是:

item1
item2
item3
相关问题