我有这个JSON代码:
{
"success": 1,
"item": [
{
"itemId": "jogurt123",
"name": "Jogurt",
"description": "kajmak",
"pictureUrl": "https://www.google.hr/images/srpr/logo11w.png",
"categoryId": "mlijeko"
}
],
"specs": [
{
"specId": "volumen",
"value": "1",
"unit": "litra"
},
{
"specId": "mast",
"value": "50",
"unit": "%"
}
]
}
我想知道如何使用Java将名称/值对提取到字符串中。 我想得到最终结果:
String name = "Jogurt"
String description = "kajmak"
etc...
我尝试使用JSONObject创建一个包含此名称/值对的对象,然后我想提取它们,但是在下面的代码中
String getParam(String code, String element){
try {
String base = this.getItembyID(code);
JSONObject product = new JSONObject(base);
String param = product.getString("name");
return param;
} catch (JSONException e) {
e.printStackTrace();
return "error";
}
}
我得到一个例外,说明当JSONObject中没有元素“name”时。有什么建议吗?
编辑:getItembyID方法以字符串形式返回上面写的JSON代码。 JSON代码已经过验证
答案 0 :(得分:4)
{ - > JSONObject
[ - > JSONArray
你需要在Jsonarray
中获取jsonObject这样做
String getParam(String code, String element){
try {
String base = this.getItembyID(code);
JSONObject product = new JSONObject(base);
JSONArray jarray = product.getJSONArray("item");
String param = jarray.getJSONObject(0).getString("name");
return param;
} catch (JSONException e) {
e.printStackTrace();
return "error";
}
}
答案 1 :(得分:3)
假设base
是您在问题中发布的JSON,那么您在此处说明的假设
我得到一个例外,说没有元素" name"在里面 JSONObject显然有。
错了。您显示的JSON对象仅包含3个元素:success
,item
和specs
。 item
是一个带有单个元素的JSON数组,另一个是JSON对象。该JSON对象包含名为name
的值。
您需要获取该 JSON对象,以便您可以检索该值。
或者考虑使用像Jackson或Gson这样的不同JSON解析库,它们主要基于某些POJO类为您执行此操作。
答案 2 :(得分:1)
如果你有特定数据的java类,你会得到json的形式。 然后使用jackson库很容易提取数据。 [下载:http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.2.3/jackson-core-2.2.3.jar]
然后您的代码将是:
public String getParam(String code, String element) {
String base = this.getElementById(code);
ObjectMapper mapper = new ObjectMapper();
Product product = mapper.readValue(base, Product.class);
// this will return name of product
return product.getItem()[0].getName();
}