如何在Java中提取某些JSON数据
我有以下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
{
"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。在这种情况下,我建议使用JacksonObjectMapper
,因为它有一些非常好的特性。此外,请查看JSONPath
,如果您只需要查询JSON负载的特定部分,这也可能会对您有所帮助。前面的反斜杠指的是根目录。尽量不说。还有,你在多大程度上陷入困境?从你的问题中也不清楚你使用的是哪个JSON库。对不起,我使用的是简单的JSON库。我被困在获取“客户机”的具体名称(如“公司名称”和“名称”)的下一步中。省略前导反斜杠会导致java.io.FileNotFoundException:testdata.json(系统无法找到指定的文件)错误只是想知道您的问题是否是查找路径文件?或者是阅读每个元素,如姓名、电子邮件、电话等?