【问题标题】:Android - JSON no value for artists (echonest api) [duplicate]Android - JSON对艺术家没有价值(回声API)[重复]
【发布时间】:2015-09-22 08:51:02
【问题描述】:

使用 GET 请求从 echonest API 获取艺术家(搜索)我得到以下 JSON:

{
    "response": {
        "status": {
            "version": "4.2",
            "code": 0,
            "message": "Success"
        },
        "artists": [
            {
                "id": "ARR3ONV1187B9A2F49",
                "name": "Muse"
            }
        ]
    }
}

我想将上面的 JSON 字符串转换成这样的 JSON 对象:

jso = new JSONObject(JSONstring);

然后我想将 id 和 name 都保存到字符串中,首先我想将艺术家数组保存在 JSON 数组中,如下所示:

jsa = jso.getJSONArray("artists");

这是我得到 JSON 错误对艺术家没有价值的那一刻。

我无法弄清楚这里出了什么问题,有人可以帮助我朝着正确的方向前进吗?谢谢。

【问题讨论】:

  • jsonarray 嵌套在另一个 jsonobject 下
  • JsonArray 包含另一个 JsonObject,从这个 JsonObject 你可以得到字符串 id 和 name。

标签: java android json echonest


【解决方案1】:

json数组artists在json对象response里面

所以你必须先获取键为response的Json对象,然后获取 json数组artists来自它

jsa = jso.getJSONObject("response");
jsa.getJSONArray("artists");

【讨论】:

    【解决方案2】:

    Artists 数组是响应 JSON 对象,因此首先获取响应数据,然后在获取艺术家 JSON 数组后,如下所示

    JSONObject response = jso.getJSONObject("response");
    jsa = response.getJSONArray("artists");
    

    希望对你有帮助!!

    【讨论】:

      【解决方案3】:

      您没有获得价值的原因是因为您没有遵循嵌套。

      你必须像它的嵌套一样接收对象。首先,您必须转到 MainObject,然后将数据存储在“响应”对象中。之后,您可以从“响应”对象接收数组。

      您必须按照设计的方式嵌套 JSON。

      尝试这样做..

      JSONObject mainObj = new JSONObject(JSONstring);
      
       // Try to get Response Object from main JSON object then try to get array from it.
      JSONObject responseObj = mainObj.getJSONObject("response");
      
      // getting array from response object.
      JSONArray artistArr = responseObj.getJSONArray("artists");
      

      或者你可以一行完成..

      JSONArray artistArr = mainObj.getJSONObject("response").getJSONArray("artists");
      

      【讨论】:

        【解决方案4】:

        您将它嵌套在响应对象中,因此您当前正尝试访问“艺术家”,就像它是“父”对象一样,但这实际上是“响应”对象的子对象。您需要先检索 json 对象以“响应”,然后获取 json 数组“艺术家”。

        【讨论】:

          【解决方案5】:

          “艺术家”数组在“响应”对象内,您可以使用以下代码获取“艺术家”数组:

          jsonArray = jso.getJSONObject("response").getJSONArray("artists");
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-11
            • 1970-01-01
            • 2012-06-05
            • 2017-02-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多