2016-05-31 51 views
2

我正在使用翻新来处理rest-api调用。 我休息API返回以下JSON使用无限数量的对象名称对解析器json进行改造

"MyObject": { 
     "43508": { 
     "field1": 4339, 
     "field2": "val", 
     "field3": 15, 
     "field4": 586.78 
     }, 
     "1010030": { 
     "field1": 1339, 
     "field2": "val212", 
     "field3": 1, 
     "field4": 86.78 
     },... 
    } 

请注意对象MyObject包含的对象与实际是一个ID的名称。 对于所有其他API,我正在使用改进而没有任何问题。 在这种情况下,似乎不可能使用标准方法:定义包含响应中预期字段的类。

有没有办法来此JSON转化成含有

{ 
    "field1": xxx, 
    "field2": "yyy", 
    "field3": www, 
    "field4": zzz 
} 

还是有更好的方式来处理这个问题的一个数组,而不必返回到“手动”解析JSON一个JSON?

回答

0

尝试使用下一个方法:

public class Response { 

    Map<String, YourObject> MyObject; 
    // getter, setter 
} 

public interface GitHubService { 
    @GET("some_path") 
    Call<Response> listMyObjects(); 
} 

所有你的对象会被解析成地图。您可以通过keySet()方法获取所有ID的列表,或者使用entrySet()列出所有条目。

0

尝试将注释SerializedName(nameOfField)放在变量名上。

@SerializedName("13445345") 
MyObject object; 
+2

问题是有很多可能的ID。我无法像这样设置SerializedName – user6405527

0

那么我的想法是相当手动,但它应该工作。我不会在这里复制并粘贴其他人的回答,因此请看this answer以了解如何遍历所有myObject的按键。然后为每个这些密钥创建一个新的JSONArray并添加密钥值对fieldX-valueX

这只是一个基本的想法,因为我认为你可以自己处理代码,你看起来像是一个知道他简单的东西的人。