【问题标题】:How to convert a string to a JSON and then extract required values from the JSON object?如何将字符串转换为 JSON,然后从 JSON 对象中提取所需的值?
【发布时间】:2014-10-02 02:35:27
【问题描述】:

我有一个字符串如下,我想把它转换成一个 JSON 对象,然后提取“文本”字段的所有值:

{
 "id": "/m/030qb3t",
  "property": {
   "/travel/travel_destination/tourist_attractions": {
    "valuetype": "object",
    "values": [
    {
     "text": "Hollywood Wax Museum",
     "lang": "en",
     "id": "/m/07_dsf",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.000Z"
    },
    {
     "text": "Hollywood Walk of Fame",
     "lang": "en",
     "id": "/m/0qjfl",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.000Z"
    },
    {
     "text": "TCL Chinese Theatre",
     "lang": "en",
     "id": "/m/04n2h_",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.000Z"
    },
    {
     "text": "Museum of Tolerance",
     "lang": "en",
     "id": "/m/04by8k",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.001Z"
    },
    {
     "text": "Getty Center",
     "lang": "en",
     "id": "/m/01mvl6",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.001Z"
    },
    {
     "text": "Museum of Contemporary Art, Los Angeles",
     "lang": "en",
     "id": "/m/02816j",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.001Z"
    },
    {
     "text": "Griffith Park",
     "lang": "en",
     "id": "/m/02sdph",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.001Z"
    },
    {
     "text": "Hollywood Boulevard",
     "lang": "en",
     "id": "/m/035zpq",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.002Z"
    },
    {
     "text": "Olvera Street",
     "lang": "en",
     "id": "/m/030svs",
     "creator": "/user/rumifield",
     "timestamp": "2008-12-27T17:02:32.002Z"
    },
    {
     "text": "Centinela Adobe",
     "lang": "en",
     "id": "/m/04drm4",
     "creator": "/user/supergmackenz",
     "timestamp": "2011-12-13T18:45:26.003Z"
    }
   ],
   "count": 27.0
  }
 }
}

我试过了

JsonParser jsParser = new JsonParser();
JsonObject jsObject = (JsonObject)jsParser.parse(jsonStr);
String text=jsObject.getString("text");

但它不起作用,我不知道如何提取所有“文本”值,任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: java json gson freebase


    【解决方案1】:

    所以首先你需要了解在 JSON 中你需要从上到下访问值,而不是直接访问键。我想这会做你想要的
    这是针对 2.3 gson 库的

    JsonParser jsParser = new JsonParser();
    JsonObject jsObject = (JsonObject)jsParser.parse(jsonStr);
    JsonObject property = jsObject.getAsJsonObject("property");
    JsonObject tourist  = property.getAsJsonObject("/travel/travel_destination/tourist_attractions");
    JsonArray  values   = tourist.getAsJsonArray("values"); 
    for(int i=0;i<values.size();i++) {
        JsonObject data = values.get(i).getAsJsonObject();
        String text = data.get("text").getAsString();
    }
    

    我希望我的回答足够清楚。如果您对我的回答有任何疑问,请随时在评论中提问:)

    【讨论】:

    • 谢谢,但不知道为什么,程序在for循环的行中抛出“java.lang.NullPointerException”...
    【解决方案2】:

    在这个json里values是一个数组,所以试试

    JSONObject getObject = object.getJSONObject("property");
    JSONObject block  =  getObject.getJSONObject("/travel/travel_destination/tourist_attractions");
    JSONArray getArray = block.getJSONArray("values");
    
    for(int i = 0; i < getArray.size(); i++)
    {
        JSONObject jsObject= getArray.getJSONObject(i);
        String text=jsObject.getString("text");
    }
    

    【讨论】:

    • 我应该用什么罐子?
    • 我个人使用&lt;dependency&gt; &lt;groupId&gt;org.codehaus.jackson&lt;/groupId&gt; &lt;artifactId&gt;jackson-mapper-asl&lt;/artifactId&gt; &lt;version&gt;1.9.13&lt;/version&gt; &lt;/dependency&gt;
    • @ScaryWombat 升级时间!
    • 我使用了 org.json.jar,尝试了如下代码,但它抛出错误“org.json.JSONException: JSONObject["values"] not found.”JSONObject js=new JSONObject (输入线); JSONObject getObject = js.getJSONObject("property"); JSONArray getArray = getObject.getJSONArray("values"); for(int i = 0; i
    • @SotiriosDelimanolis 这是这个 jar 的最新版本 - 你有什么推荐的?
    猜你喜欢
    • 1970-01-01
    • 2018-01-06
    • 2021-06-12
    • 1970-01-01
    • 2018-06-09
    • 2019-08-27
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多