反序列化json数组并使用放心提取值

时间:2015-05-02 08:01:13

标签: json gson rest-assured

我是一个java,json,放心的新手,并努力工作,学习如何测试休息api。我有一个数组返回作为一个放心的回应:

 Response response = given(getProjectInfoRequest).get();
 response.asString(); 

{
    "options": [
        {
            "text": "111",
            "label": "ABC"
        },
        {
            "text": "222",
            "label": "DEF"
        },
        {
            "text": "333",
            "label": "GHI"
        }
    ]
}

我想将标签值的文本值提取为“DEF”,我该怎么做?

请注意我在阅读了这么多帖子后到目前为止做了以下的事情:

1. Options[] options = given(getProjectInfoRequest).when().get().as(Options[].class);
this was giving me exception :
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

then I tried below:
2. Options options = gson.fromJson(response.asString(), Options.getClass());
this at least resolved the above issue.
    public class Options {
    public String getLabel() {
        return label
    }

    public void setLabel(String label) {
        this.label = label
    }

    public String getValue() {
        return value
    }

    public void setValue(String value) {
        this.value = value
    }
    public String label;
    public String value;
} 

从这一点来说,我不确定如何迭代文本和值的数组以提取我需要的东西,请你们提供你的输入吗?

请原谅我对提出这样一个基本问题的无知。 还请建议我学习这个的好方法/方法。

提前致谢!

1 个答案:

答案 0 :(得分:3)

U can use Gson - 这是一个Java库,可用于将Java对象转换为JSON表示。

JsonParser parser = new JsonParser();
JsonObject o = (JsonObject)parser.parse(response.asString());

for (Map.Entry<String,JsonElement> entry : o.entrySet()) {
    JsonArray array = entry.getValue().getAsJsonArray();
    for (JsonElement elementJSON : array) {
        [...]
    }
}