【问题标题】:Parse Json array without keys解析没有键的 Json 数组
【发布时间】:2014-09-09 12:16:38
【问题描述】:

我想从服务器解析一个数组,但我无法获取数组 这是 jsonString 成功获得的:

{
    "status":"OK",
    "message":"this is your start and end coordinates",
    "data":"{\"start\":[\"35.778763\",\"51.427360\"],\"end\":[\"35.768779, 51.415002\"]}"
}

我想要数据数组列表中的双值:

//try/catch
Log.d(TAG, "Passes here");          
JSONObject jObject = new JSONObject(jsonString);

JSONArray jData = jObject.getJSONArray("data");
Log.d(TAG, "Not PAASING HERE !!! ");

JSONArray jArrayStart = (JSONArray) jData.get(0);
JSONArray jArrayEnd =  (JSONArray) jData.get(1);

latitudeStart =  (Double) jArrayStart.get(0);
longtitudeStart = (Double) jArrayEnd.get(1);
latitudeEnd = (Double) jArrayEnd.get(0);
longtitudeEnd = (Double) jArrayEnd.get(1);

【问题讨论】:

    标签: java android arrays json parsing


    【解决方案1】:

    您要解析的是string

    {
        "status": "OK",
        "message": "this is your start and end coordinates",
        "data": "{\"start\":[\"35.778763\",\"51.427360\"],\"end\":[\"35.768779, 51.415002\"]}"
    }
    

    所以它是这样工作的:

    //first, retrieve the data from the response JSON Object from the server
    JSONObject response = new JSONObject(jsonString);
    String status = response.getString("status");
    String message = response.getString("message");
    //Note this: "data" is a string as well, but we'll have to parse that later.
    String data = response.getString("data");
    
    //get the doubles from the arrays from the "data" component.
    JSONObject dataObject = new JSONObject(data);
    JSONArray start = dataObject.getJSONArray("start");
    JSONArray end = dataObject.getJSONArray("end");
    
    for (int i = 0; i < start.length(); i++) {
        String value = start.getString(i);
        //do something with the start String (parse to double first)
    }
    for (int i = 0; i < end.length(); i++) {
        String value = end.getString(i);
        //do something with end String (parse to double first)
    }
    

    所以数据实际上是一个String,但代表一个JSONObject(您必须对其进行解析),而它又包含两个JSONArrays

    如果 dataJSONObject 而不是 String,则 JSON 将如下所示:

    {
        "status": "OK",
        "message": "this is your start and end coordinates",
        "data": {
            "start": [
                "35.778763",
                "51.427360"
            ],
            "end": [
                "35.768779", //note that in your example, this quote is missing (first quote on next line too)
                "51.415002"
            ]
        }
    }
    

    【讨论】:

    • 谢谢,问题是提到的结尾缺少qoutation和条目的字符串类型
    【解决方案2】:

    data 的值不是JSONArray 它的JSONObject

    说明

    JSONObject 将被{} 包围

    JSONArray 将被[] 包围

    【讨论】:

    • 以下代码仍然没有成功:' JSONObject jObject = new JSONObject(jsonString); JSONObject jData = jObject.getJSONObject("数据"); JSONArray jArrayStart = jData.getJSONArray("开始"); JSONArray jArrayEnd = jData.getJSONArray("end"); latitudeStart = (Double) jArrayStart.get(0); longtitudeStart = (双) jArrayEnd.get(1); latitudeEnd = (双) jArrayEnd.get(0); longtitudeEnd = (Double) jArrayEnd.get(1);'
    【解决方案3】:

    data 不是一个数组,它是一个 json 对象,因此您无法按照您的方式访问它。 如果您想从 json 对象“数据”中获取起始数组,请在下面使用 jObject.optJSONObject("data").optJSONArray("start");

    同样的东西可以用来检索“结束”json数组。

    然后使用 optJSONObject() 和/或 optString() API 从 json 数组中检索所需的值。

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2019-08-05
      • 2020-01-17
      • 1970-01-01
      • 2015-08-15
      • 2015-06-04
      • 2019-01-29
      • 2021-07-28
      • 2013-03-27
      相关资源
      最近更新 更多