我正在使用以下代码从文件中获取JSON数据,目前我能够在一个字符串中实现JSON。我想将它解析为数组。 json文件是这样的:
{
"employee": [
{
"name": "joan",
"lastname": "test",
"age": 23
},
我正在使用以下代码来获取数据但我在一个字符串中得到它并且我想打印一些数据
JSONObject jsonObject = (JSONObject) parser
.parse(new FileReader("C:\\MockData\\Json\\js.txt"));
JSONParser parser1 = new JSONParser();
ContainerFactory containerFactory = new ContainerFactory() {
public List<?> creatArrayContainer() {
return new LinkedList<Object>();
}
public Map<?, ?> createObjectContainer() {
return new LinkedHashMap<Object, Object>();
}
};
Map<?, ?> json = (Map<?, ?>) parser1.parse(jsonObject.toJSONString(), containerFactory);
Iterator<?> iter = json.entrySet().iterator();
System.out.println("==iterate result==");
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
System.out.println(entry.getKey() + "=>" + entry.getValue());
}
这是输出
employee=[{age=23, name=joan, lastname=test}, {age=22, name=Alex, lastname=avz}, {age=65, name=Dan, lastname=severn}]
这里 entry.getValue()重新调整数组的一个串联字符串, 而一次只运行一次...... 但我想循环它以取得关键值。我该怎么办? 例如,如果我想打印名字亚历克斯22岁我应该怎么做?
注意:文件可以更改,所以我不知道密钥(现在它的名称,但可以是firstName和任何其他字段,我需要通用的解决方案)。
如果有办法使用不同的解析器可以做到我打开。
答案 0 :(得分:2)
以下是您问题的完整解决方案。 使用此代码,您可以将数据分解为每个员工,并分离员工属性。
Set<String> keySet = jsonObject.keySet();
Iterator keySetIterator = keySet.iterator();
while(keySetIterator.hasNext()){
JSONArray array = (JSONArray)jsonObject.get(keySetIterator.next());
while(employeeKeySetIterator.hasNext()){
String employeeKey = employeeKeySetIterator.next().toString();
System.out.println(employeeKey + " : "+ employee.get(employeeKey));
}
}
}
答案 1 :(得分:1)
您需要将内部json字符串强制转换为JSONArray
JSONArray array = (JSONArray)jsonObject.get("employee");
Iterator<JSONObject> iterator = array.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toString());
}