我有以下JSON文件:
val (x,y,z) = (Vector(1.0, 3.0, 3.0),Vector(2.0, 5.0, 1.0),Vector(5.0, 7.0, -1.0))
val p = ThreeDPlot().withScatter3D(x,y,z,ScatterOptions().copy(mode = Seq(ScatterMode.Marker)));
draw(p, "hello-plotly");
我试图获取详细信息,例如公司名称,客户名称和“Z联系人”的电子邮件地址。
到目前为止我已经
了{
"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"
}
} ]
}
这将返回整个项目详细信息数据。我对如何使用Java获得每个单独的值感到困惑。
此外,我将这个JSON文件放在与读取它的类相同的包中,但是当我使用
时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();
}
}
为什么无法找到该文件?我使用文件的完整路径的解决方案有效,但这可能会在运行时更改,因此不适合。
答案 0 :(得分:0)
根据简单的JSON库API提供的内容,根据您的上述代码,array
最后会包含以下内容:
[
{
"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);
在这种情况下,您将再次能够使用JSONObject
project.get("company name");
如果您拥有给定对象的POJO,那么该库也可能支持使用以下内容对POJO进行反序列化:
List<Project> project = array.getValuesAs(Project.class);
在这种情况下,您可以正常操作列表,并使用普通的setter和getter来操作对象。
请注意,IMO,如果您的JSON不是非常动态,您应该尽可能将JSON反序列化为POJO。在这种情况下,我建议使用Jackson ObjectMapper
,因为它有一些非常好的功能。此外,如果您只需要查询JSON有效负载的特定部分,请查看JSONPath
,这可能也会有所帮助。