如何反序列化没有名称和动态的json对象?

问题描述:

我有这样的JSON:如何反序列化没有名称和动态的json对象?

{ 
    "username": [ 
     "A user with that username already exists." 
    ], 
    "ruc": [ 
     "user with this ruc already exists." 
    ], 
    "code": [ 
     "user with this code already exists." 
    ], 
    "document_number": [ 
     "user with this document number already exists." 
    ] 
} 

属性的名称将是动态的和JSON的长度了。 我使用的是GSON工具,我创建了一个POJO,但没有名称,我无法引用此,这就是为什么我收到myError实例,为空。 这是我的POJO

public class MyError { 
    public Map<String, Object> message = new HashMap<>(); 
} 

这是我GSON代码

myError = new Gson().fromJson(response.errorBody().string(), MyError.class); 

而且我想显示的消息中这样每一个项目:

for (String key : myError.message.keySet()) { 
    Utils.showToast(getBaseContext(), "Message: " + myError.message.get(key) + " Field: " + key); 
} 

我也有类似的问题几个月前,发现这个答案是非常有帮助的:

How to parse dynamic JSON fields with GSON?

+0

谢谢,我已经忘记了Gson的财产。我会尝试。 –

+0

不客气!祝你好运! – broxhouse

你可以尝试使用这个:

Map myError = new Gson().fromJson(s, Map.class); 

或者,如果你想使用你的类的JSON应该是这样的:

{ "message": { "username": [ "A user with that username already exists." ], "ruc": [ "user with this ruc already exists." ], "code": [ "user with this code already exists." ], "document_number": [ "user with this document number already exists." ] } }

考虑使用GSON和Java本地JsonParser。