使用 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"));
}