【问题标题】:JSON serialize response without key values没有键值的 JSON 序列化响应
【发布时间】:2020-02-01 12:24:02
【问题描述】:

我正在使用改造来进行 http 调用,并使用 gson 来进行 json 解析。 这是我的json

 {
"-109.457154947154,26.4155454751248": [
{
  "data": {
    "date": "2017-13-13",
    "source_type": "Light",
    "table_value": 3,
    "condition": "Good"
  }
},
{
  "data": {
    "date": "2019-11-15",
    "source_type": "Light",
    "table_value": 4,
    "condition": "Very good"
  }
},
{
  "data": {
    "date": "2019-11-15",
    "source_type": "Heavy",
    "table_value": 3,
    "condition": "Good"
  }
}
],
 "-110.2324214532214,27.9288762948267": [
 {
  "data": {
    "date": "2017-13-13",
    "source_type": "Light",
    "table_value": 3,
    "condition": "Good"
  }
},
{
  "data": {
    "date": "2019-11-15",
    "source_type": "Light",
    "table_value": 4,
    "condition": "Very good"
  }
},
{
  "data": {
    "date": "2019-11-15",
    "source_type": "Heavy",
    "table_value": 3,
    "condition": "Good"
  }
}
]
}

此响应没有顶级元素的键。我想序列化这个响应。

这是我的数据 object.class

public class Data {

/*
*  "data": {
    "date": "2017-13-13",
    "source_type": "Light",
    "table_value": 3,
    "condition": "Good"
  }
*
* */

@SerializedName("date")
@Expose
private String date;

@SerializedName("source_type")
@Expose
private String source_type;

@SerializedName("table_value")
@Expose
private String table_value;

@SerializedName("condition")
@Expose
private String condition;

public Data(String date, String source_type, String table_value, String condition) {
    this.date = date;
    this.source_type = source_type;
    this.table_value = table_value;
    this.condition = condition;
}
   // Getters and Setters
 }

由于我是 Android 开发新手,我不明白如何序列化其他元素。我知道我应该编写另一个模型类来解析这个 JSON 响应。但我想不出正确的做法。

【问题讨论】:

标签: android json retrofit okhttp


【解决方案1】:

在您的示例中,也可以从 jsonarray 的不同键中获取此动态 json 响应的完整代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ArrayList<Data> arrayListData;
    arrayListData=new ArrayList<>();

   String jresponse="" +
           "{\n" +
           "   \"-109.457154947154,26.4155454751248\":[\n" +
           "      {\n" +
           "         \"data\":{\n" +
           "            \"date\":\"2017-13-13\",\n" +
           "            \"source_type\":\"Light\",\n" +
           "            \"table_value\":3,\n" +
           "            \"condition\":\"Good\"\n" +
           "         }\n" +
           "      },\n" +
           "      {\n" +
           "         \"data\":{\n" +
           "            \"date\":\"2019-11-15\",\n" +
           "            \"source_type\":\"Light\",\n" +
           "            \"table_value\":4,\n" +
           "            \"condition\":\"Very good\"\n" +
           "         }\n" +
           "      },\n" +
           "      {\n" +
           "         \"data\":{\n" +
           "            \"date\":\"2019-11-15\",\n" +
           "            \"source_type\":\"Heavy\",\n" +
           "            \"table_value\":3,\n" +
           "            \"condition\":\"Good\"\n" +
           "         }\n" +
           "      }\n" +
           "   ],\n" +
           "   \"-110.2324214532214,27.9288762948267\":[\n" +
           "      {\n" +
           "         \"data\":{\n" +
           "            \"date\":\"2017-13-13\",\n" +
           "            \"source_type\":\"Light\",\n" +
           "            \"table_value\":3,\n" +
           "            \"condition\":\"Good\"\n" +
           "         }\n" +
           "      },\n" +
           "      {\n" +
           "         \"data\":{\n" +
           "            \"date\":\"2019-11-15\",\n" +
           "            \"source_type\":\"Light\",\n" +
           "            \"table_value\":4,\n" +
           "            \"condition\":\"Very good\"\n" +
           "         }\n" +
           "      },\n" +
           "      {\n" +
           "         \"data\":{\n" +
           "            \"date\":\"2019-11-15\",\n" +
           "            \"source_type\":\"Heavy\",\n" +
           "            \"table_value\":3,\n" +
           "            \"condition\":\"Good\"\n" +
           "         }\n" +
           "      }\n" +
           "   ]\n" +
           "}";


   try {
       JSONObject jsonObject=new JSONObject(jresponse);

       JSONArray jsonArrayNames=jsonObject.names();


       for (int n=0;n<jsonArrayNames.length();n++)
       {

           //JSONArray jsonArray=jsonObject.getJSONArray("-109.457154947154,26.4155454751248");
           Log.d("jsonarray = ",jsonArrayNames.getString(n)+"");
           String sjsonarrayname=jsonArrayNames.getString(n)+"";
           JSONArray jsonArray=jsonObject.getJSONArray(sjsonarrayname);

           if(jsonArray.length()>0)
           {
               for(int i=0;i<jsonArray.length();i++)
               {
                   JSONObject xobj=jsonArray.getJSONObject(i);
                   JSONObject data_object=xobj.getJSONObject("data");

                   String date=data_object.getString("date");
                   String source_type=data_object.getString("source_type");
                   String table_value=data_object.getString("table_value");
                   String condition=data_object.getString("condition");

                   Toast.makeText(getApplicationContext(),date+"\n"+source_type+"\n"+table_value+"\n"+condition,Toast.LENGTH_LONG).show();

                   Log.d("date=",date+"");
                   Log.d("source_type=",source_type+"");
                   Log.d("table_value=",table_value+"");
                   Log.d("condition=",condition+"");
                   Log.d("========","========");

                   arrayListData.add(new Data(date,source_type,table_value,condition));
               }
           }

       }


   }
   catch (Exception e)
   {
                Log.d("error=",e+"");
   }


}

【讨论】:

    【解决方案2】:

    "-109.4571...", "-110.23..." 是关键,而不是价值。如果要获取密钥,可以查看here

    如果你想解析到对象,你应该修复json到:

    {
        "string_key_1":"-109.457154947154,26.4155454751248",
        "string_key_2":[
            {
                "data": {
                    "date": "2017-13-13",
                    "source_type": "Light",
                    "table_value": 3,
                    "condition": "Good"
                }
            }
        ]
    }
    

    【讨论】:

    • 感谢您的更新,但如果您检查下一个 json 对象,这些 -109.4571..."、"-110.23..." 已更改。这意味着它们是动态的。
    猜你喜欢
    • 2019-05-16
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多