我正在尝试使用java从产品的JSON中检索值,即80000
,其中Name是“ Camera”。有人可以帮我吗?
{
"Products":{
"Product":[
{
"Name":"Tv",
"Value":50000
},
{
"Name":"Camera",
"Value":80000
},
{
"Name":"Phone",
"Value":15000
},
]
}
}
JSONObject arrayOfProducts = jsonObj.optJSONObject("Products");
JSONArray products = arrayOfProducts.getJSONArray("Product");
for (int i = 0; i < products.length(); i++) {
JSONObject objects = products.getJSONObject(i);
Iterator key = objects.keys();
while (key.hasNext()) {
String k = key.next().toString();
if(k.equals("Name")) {
if(objects.getString(k).equals("Camera")) {
System.out.println("Key : " + k + ", value : " + objects.getString(k));
}
}
}
答案 0 :(得分:0)
您的JSON错误。
正确:"Products"
错误: “Products”
{}
中。将您的整个JSON文件内容包含在{}
中。答案 1 :(得分:0)
如果要在JSON的键值对中获取值,则需要使用以下语法:
[JSONObject].get[data_type]([key_name])
。
在以上给定的语法中,将[JSONObject]
替换为
代表JSON的类型JSONObject
的变量。就你而言
是objects
。
用该特定键处的值的数据类型替换[data_type]
。在里面
当前情况下,键"Value"
的值为80000
是Integer
。因此,
应该是getInt
。
用您需要检索其值的键替换[key_name]
,该键在您的
情况是"Value"
。
因此,您需要使用该代码段来获取值80000,其中“相机”部分为:objects.getInt("Value")
。
这是您的整体更新代码:
JSONObject arrayOfProducts = jsonObj.optJSONObject("Products");
JSONArray products = arrayOfProducts.getJSONArray("Product");
for (int i = 0; i < products.length(); i++) {
JSONObject objects = products.getJSONObject(i);
Iterator key = objects.keys();
while (key.hasNext()) {
String k = key.next().toString();
if(k.equals("Name")) {
if(objects.getString(k).equals("Camera")) {
System.out.println("\nKey : " + k + "\nName : " + objects.getString(k) + ", \nValue : " + objects.getInt("Value"));
}
}
}
}
答案 2 :(得分:0)
为什么需要选择复杂的解决方案来解析JSON?
您应该使用定义一些实体,然后使用库来读取JSON值(例如:jackson的“ ObjectMapper”)以将其解析为Object。
在处理完Java对象之后,您可以将所有复杂的部分留给它们。