我遇到一种JSON问题。
示例:
{
"1": "name",
"2": "example",
"3": "loremipsum",
"4": "etc",
}
我总是用Gson将json转换为POJO。我使用的是Retrofit 1.9
但在这种情况下它的愚蠢是因为我收到的对象如下:
public class Example {
@SerializedName("1")
@Expose
private String _1;
@SerializedName("2")
@Expose
private String _2;
@SerializedName("3")
@Expose
private String _3;
@SerializedName("4")
@Expose
private String _4;
.........
如何解析此JSON以接收对象列表,如:
public class Example {
private int id;
private String value;
}
感谢您的帮助。
答案 0 :(得分:1)
如果您的JSON具有可变密钥,则必须手动反序列化,因此我认为最佳解决方案是将您的JSON响应更改为:
[
{"id" : 1, "value" : "name"},
{"id" : 2, "value" : "example"}
]
和
public class Response {
public Example[] examples;
}
答案 1 :(得分:0)
因为你的变量键,很难用GSON
进行解析。
但你可以用JSONObject
来做这件事,而且非常简单。有代码,我测试过它,效果很好:
private ArrayList<Example> parseJson() throws JSONException {
String json = "{\n" +
" \"1\": \"name\",\n" +
" \"2\": \"example\",\n" +
" \"3\": \"loremipsum\",\n" +
" \"4\": \"etc\"\n" +
"}";
ArrayList<Example> exampleList = new ArrayList<>();
JSONObject jsonObject = new JSONObject(json);
Iterator<String> iterator = jsonObject.keys();
while(iterator.hasNext()) {
Example example = new Example();
String id = iterator.next();
example.id = Integer.parseInt(id);
example.value = jsonObject.getString(id);
exampleList.add(example);
}
return exampleList;
}
答案 2 :(得分:0)
我找到了解决方案:
我使用private String getDateTime() {
// get date time in custom format
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
return sdf.format(new Date());
}
作为回复
后来:
Gson.JsonObject