使用Java从JSON中提取名称/值对

时间:2014-02-25 03:47:30

标签: java json parsing

我有这个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代码已经过验证

3 个答案:

答案 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个元素:successitemspecsitem是一个带有单个元素的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();
}