如何使用Retrofit解析数组JSON数组?

时间:2018-06-06 09:56:48

标签: android json retrofit

我致电binance- api,回复是这样的:

[
 [
    1528265700000,
    "606.84000000",
    "609.50000000",
    "606.84000000",
    "609.50000000",
    "399.45771000",
    1528266599999,
    "242985.40248060",
    415,
    "200.23538000",
    "121838.16910200",
    "0"
 ],
 [
    1528266600000,
    "609.50000000",
    "609.58000000",
    "606.88000000",
    "608.11000000",
    "1328.29962000",
    1528267499999,
    "807439.07315600",
    709,
    "220.23076000",
    "133950.90569850",
    "0"
]

它没有json对象。当我使用改装时,我得到了

  

JsonSyntaxException:预期BEGIN_OBJECT但是BEGIN_ARRAY在   第1行第3列路径$ [0]

我该如何解析它?

4 个答案:

答案 0 :(得分:1)

使用类似这样的东西,请尝试创建你的子数组,否则你很困惑从子数组中获取数据,因为你需要使用这个0,1,2,3 ....作为你的密钥。

 private void loadJson() {

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("you api url")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call = request.getJSON();
        call.enqueue(new Callback<JSONResponse>() {
            @Override
            public void onResponse(Call<JSONResponse> call, Response<JSONResponse> res) {

                JSONResponse response = res.body();
                try {
                    JSONArray json = new JSONArray(""+response);
                    for (int i = 0; i < json.length(); i++) {

                        JSONArray arrayInArray = json.getJSONArray(i);

                        for (int j = 0; j < arrayInArray.length(); j++) {
                            Log.e("Here is", "" + arrayInArray.getString(j));
                        }

                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<JSONResponse> call, Throwable t) {
                Log.d("Error",t.getMessage());
            }
        });
}

让我知道它是否适合你。

答案 1 :(得分:1)

你需要手动解析这个json。请检查以下解决方案: -

 JSONArray jsonArray = new JSONArray(response);
    for(int i=0;i<jsonArray.length();i++){
        String value = jsonArray.get(i);
    }

答案 2 :(得分:1)

您应该解析API响应,如下面的代码:

  String result = response.body().string();
  JSONArray jsonArray = new JSONArray(result);
  for(int i=0;i<jsonArray.length();i++){
       JSONArray jsonArrayRow = jsonArray.getJSONArray(i);
       for (int j = 0; j < jsonArrayRow.length(); j++) {
                 String data=jsonArrayRow.getString(j);
         }
  }

希望这有助于你...如果你需要任何帮助,你可以问

答案 3 :(得分:0)

Retrofit期望json对象以{开头,以}结尾 也许你可以添加它们,如果它们还没有?