用于阵列的 JSON 简单密钥查找器



json-simple文档中有一个非常好的KeyFinder示例

但是如果我尝试获取一个数组,它只会返回我第一个元素杰森

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

如果我使用 keyFinder 的示例并搜索"项目",我只会得到"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);
    }

我的问题是如何在不知道"路径"的情况下获取数组 foo>> 栏>> foobar 以通过其键获取"项目"数组。

它将为您提供完整的数组。你犯的一个错误是你没有把foobarfoobar包裹在""中。它应该是这样的:

{"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

最新更新