使用GSON将密钥的值转换为json中的密钥

时间:2015-10-07 06:34:12

标签: android json gson

我使用GSON库生成以下JSON

[
  {
    "name": "Mobile Number",
    "value": "234567891"
  },
  {
    "name": "Controller Number",
    "value": "I1500001"
  },
  {
    "name": "Unit Type",
    "value": "2"
  },
  {
    "name": "Operator",
    "value": "32"
  },
  {
    "name": "Data Length",
    "value": "0"
  },
  {
    "name": "Software Version",
    "value": "32"
  },
  {
    "name": "Mode",
    "value": "6"
  }
]

我的课有两个字段如下

public class IDUData {

        @SerializedName("name")
        private String name;
        @SerializedName("value")
        private String value;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }

现在我想要做的是在以下forma.i中生成JSON,希望我的name关键字段的值成为关键。我正在使用这种方法的原因是将来如果添加新名称密钥,我预期的json将自动拥有一个密钥。

[
  {
    "Mobile Number": "234567891"
  },
  {
    "Controller Number": "I1500001"
  },
  {
    "Unit Type": "2"
  },
  {
    "Operator": "32"
  },
  {
    "Data Length": "0"
  },
  {
    "Software Version": "32"
  },
  {
    "Mode": "6"
  }
]

3 个答案:

答案 0 :(得分:1)

您要做的是首先从数据中创建HashMap。一旦您从IDUData项目中创建了List或数组,下面的代码应该非常接近:

List<IDUData> list = ...; // or IDUData[] list = ...;
HashMap<String, String> map = new HashMap<>();
for(IDUData data: list){
    map.put(data.getName(), data.getValue());
}
String output = new Gson().toJson(map);

答案 1 :(得分:0)

使用gson JsonParser

String mJsonString = "{
    \"name\": \"Controller Number\",
    \"value\": \"I1500001\"
  }";
JsonElement mJson =  new JsonParser.parse(mJsonString);

IDUData object = gson.fromJson(mJson, IDUData.class);

答案 2 :(得分:0)

如果您使用onResponse()库,则可以在Volley中编写@wblaschko建议的代码:

final GsonRequest gsonRequest = new GsonRequest(URL /* your URL */,
      IDUData.class, null, new Response.Listener<IDUData>() {

    @Override
    public void onResponse(IDUData data) {
        // Copy code here
        HashMap<String, String> map = new HashMap<>();
        for(IDUData data: list){
            map.put(data.getName(), data.getValue());
        }
        String output = new Gson().toJson(map);
        // Copy code here
     }, new Response.ErrorListener() {

     }
}