如何在Java中提取某些JSON数据

如何在Java中提取某些JSON数据,java,arrays,json,file,Java,Arrays,Json,File,我有以下JSON文件: { "project details": [ { "company name": "Example company name", "project name": "Example project name", "client": { "name": "Example client", "email": "testi

我有以下JSON文件:

{
    "project details": [ {
            "company name": "Example company name",
            "project name": "Example project name",
            "client": {
                    "name": "Example client",
                    "email": "testing@test.com",
                    "phone": "+44 123456"
                    },
            "Z Contact" : {
                    "name": "Fred Blogs",
                    "email": "fred@z.com",
                    "phone": "+44 123456"
                    }
            } ]
    }
我正在尝试获取特定的详细信息,如公司名称、客户名称和“Z联系人”的电子邮件地址

到目前为止我有

public static void main(String[] args) {

    JSONParser parser = new JSONParser();
    try {

        Object obj = parser.parse(new FileReader("C:\\Users\\test\\Desktop\\Testing2\\src\\testdata.json"));
        JSONObject jsonObject =  (JSONObject) obj;
        JSONArray array = (JSONArray) jsonObject.get("project details");
        System.out.println(array);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
它将返回整个项目详细信息数据。我对如何使用Java获取每个单独的值有点困惑

此外,我将这个JSON文件与从中读取它的类放在同一个包中,但是当我使用

Object obj = parser.parse(new FileReader("\\testdata.json"));

为什么无法找到该文件?我的解决方案是使用文件的完整路径,但这可能会在运行时发生变化,因此不适合使用。

根据简单JSON库的API提供的内容判断,鉴于您的上述代码,
数组
最后将包含以下内容:

[ 
    {
      "company name": "Example company name",
      "project name": "Example project name",
      "client": {
              "name": "Example client",
              "email": "testing@test.com",
              "phone": "+44 123456"
      },
      "Z Contact" : {
              "name": "Fred Blogs",
              "email": "fred@z.com",
              "phone": "+44 123456"
      }
    } 
]
现在,我们应该能够做到以下几点:

JSONObject project = array.getJsonObject(0); 
List<Project> project = array.getValuesAs(Project.class);
在本例中,您可以再次使用
project.get(“公司名称”)查询
JSONObject

如果为给定对象提供了POJO,则库可能还支持使用以下内容对POJO进行反序列化:

JSONObject project = array.getJsonObject(0); 
List<Project> project = array.getValuesAs(Project.class);
List project=array.getValuesAs(project.class);
在这种情况下,您将能够像正常操作一样操作列表,并使用正常的setter和getter来操作对象


请注意,在我看来,如果JSON不是非常动态的,您应该尽可能地将JSON反序列化为POJO。在这种情况下,我建议使用Jackson
ObjectMapper
,因为它有一些非常好的特性。此外,请查看
JSONPath
,如果您只需要查询JSON负载的特定部分,这也可能会对您有所帮助。

前面的反斜杠指的是根目录。尽量不说。还有,你在多大程度上陷入困境?从你的问题中也不清楚你使用的是哪个JSON库。对不起,我使用的是简单的JSON库。我被困在获取“客户机”的具体名称(如“公司名称”和“名称”)的下一步中。省略前导反斜杠会导致java.io.FileNotFoundException:testdata.json(系统无法找到指定的文件)错误只是想知道您的问题是否是查找路径文件?或者是阅读每个元素,如姓名、电子邮件、电话等?