Google gson处理不同类型的json

时间:2018-02-26 06:38:26

标签: java gson

我跟随json prase并转换为POJO。

{
    "name" : "test",
    "parameters":[
    {"key":"p1","value":["array of strings"]},
    {"key":"p2","value": "some string value"}
    ]
}

正如您所看到的,参数键是一个对象数组(键值对),其中“value”可以是两种类型(数组或字符串)。
键值对象的我的POJO看起来像这样 -

public class KeyValuePair {
    private String key;
    private Object value;
}

当“parameters”数组中的所有对象都是字符串类型但是如果我得到一个带错误的字符串数组它会中断时,这很有效:

  

预期字符串,但在第1行第261行路径为$ .parameters [0] .value

时为BEGIN_ARRAY

我该如何处理这两种类型?

2 个答案:

答案 0 :(得分:0)

您可以在解析时检查值的值。

喜欢这个......

if (value instanceof JSONArray) {
// It's an array
// store in arrray
} else if (value instanceof JSONObject) {
// It's an object
// store in object
} else {
// It's something else, like a string or number
}

希望这会有所帮助。 :)

答案 1 :(得分:0)

Bigoloo有正确的方法。但是,只需将POJO更改为:

即可
@Getter @Setter
public class MysticalObject {
    private String name;
    private Collection<Object> parameters;
}

然后:

MysticalObject mo = new Gson().fromJson( json, MysticalObject.class );

因此您不需要创建任何Parameter类。从Collection parameters获取值时,检查其是String还是String[]类型。

在我的情况下,参数将是Map - LinkedTreeMap - 因此您也可以通过键p1p2从中获取参数。