使用 json-simple - 父节点的通配符获取嵌套对象
get nested Object using json-simple - Wildcard for parent Node
我想从 Java 的 JSON 文件中检索 "name" 值并将它们存储在 Arraylist 中。我正在使用 JSON-简单库 这是我的 "file.json":
的示例
{
"111": {
"customer": {
"name": "John Do",
"Height": 5.9,
"City": "NewYork"
}
},
"222":{
"customer": {
"name": "Sean Williams",
"Height": 6,
"City": "Los Angeles"
}
}
}
ID 编号“111”和“222”对我的程序来说并不重要,它们是随机生成的,所以我无法使用 jObject.get()
,因为这些值会不断变化。我尝试为父节点搜索通配符,然后转到子节点 customer
然后 name
但没有找到这样的东西。
到目前为止,这是我的代码:
import java.io.*;
import java.util.ArrayList;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class npTest {
public static void main(String[] args) throws IOException, ParseException {
try {
JSONParser jParser = new JSONParser();
JSONObject jObject = (JSONObject) jParser.parse(new FileReader("file.json"));
//Notes
} catch (FileNotFoundException e) {
System.out.print("File not found!");
}
}
}
注意:我尝试过的方法需要 jObject.get("id")
。我还注意到我无法将 JSONObject 存储在另一个 JSONObject 中,例如:JSONObject parentObj = new JSONObject(jObject.get("111"));
JSONObject实现了Map接口。因此,您可以使用正常的 Java 语法查询所有地图键:
for (Object innnerO : jObject.values()){
JSONObject customerO = (JSONObject)((JSONObject)innerO).get("customer");
}
注意:这是我在没有编译器的情况下凭头脑写的。所以我可能会出错。
您可以使用 keySet()
方法遍历 JSONObject
中的键。然后拿出你的 "customer"
并得到他们的名字。
JSONParser jParser = new JSONParser();
JSONObject jObject = (JSONObject) jParser.parse(new FileReader("c:\file.json"));
for(Object key : jObject.keySet()) {
JSONObject customerWrapper = (JSONObject)jObject.get(key);
JSONObject customer = (JSONObject)customerWrapper.get("customer");
System.out.println(customer.get("name"));
}
我想从 Java 的 JSON 文件中检索 "name" 值并将它们存储在 Arraylist 中。我正在使用 JSON-简单库 这是我的 "file.json":
的示例{
"111": {
"customer": {
"name": "John Do",
"Height": 5.9,
"City": "NewYork"
}
},
"222":{
"customer": {
"name": "Sean Williams",
"Height": 6,
"City": "Los Angeles"
}
}
}
ID 编号“111”和“222”对我的程序来说并不重要,它们是随机生成的,所以我无法使用 jObject.get()
,因为这些值会不断变化。我尝试为父节点搜索通配符,然后转到子节点 customer
然后 name
但没有找到这样的东西。
到目前为止,这是我的代码:
import java.io.*;
import java.util.ArrayList;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class npTest {
public static void main(String[] args) throws IOException, ParseException {
try {
JSONParser jParser = new JSONParser();
JSONObject jObject = (JSONObject) jParser.parse(new FileReader("file.json"));
//Notes
} catch (FileNotFoundException e) {
System.out.print("File not found!");
}
}
}
注意:我尝试过的方法需要 jObject.get("id")
。我还注意到我无法将 JSONObject 存储在另一个 JSONObject 中,例如:JSONObject parentObj = new JSONObject(jObject.get("111"));
JSONObject实现了Map接口。因此,您可以使用正常的 Java 语法查询所有地图键:
for (Object innnerO : jObject.values()){
JSONObject customerO = (JSONObject)((JSONObject)innerO).get("customer");
}
注意:这是我在没有编译器的情况下凭头脑写的。所以我可能会出错。
您可以使用 keySet()
方法遍历 JSONObject
中的键。然后拿出你的 "customer"
并得到他们的名字。
JSONParser jParser = new JSONParser();
JSONObject jObject = (JSONObject) jParser.parse(new FileReader("c:\file.json"));
for(Object key : jObject.keySet()) {
JSONObject customerWrapper = (JSONObject)jObject.get(key);
JSONObject customer = (JSONObject)customerWrapper.get("customer");
System.out.println(customer.get("name"));
}