我正在使用GSON库通过从变量获取输入来生成json对象,并且json对象还包含数组,它是字符串类型。

我尝试了以下方法:

 import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.StringReader;
    import java.util.ArrayList;
    import java.util.List;

    import com.google.gson.JsonArray;
    import com.google.gson.JsonElement;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    import com.google.gson.stream.JsonReader;


class Hello() {

public void process() {

    List<String> notifications = new ArrayList<String>();
            notifications.add("user got notification from web1");
            notifications.add("user got notification from web2");
            notifications.add("user got notification from web3");

            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("type", "normal");
            jsonObject.addProperty("text", "hello world");


            JsonArray array = new JsonArray();
            for(String msg : notifications) {
                JsonParser jsonParser = new JsonParser();
                JsonReader reader = new JsonReader(new StringReader(msg));
                reader.setLenient(true);
                JsonElement element = jsonParser.parse(reader);
                array.add(element.getAsString());
            }

            jsonObject.add("notifications", array);

            String result = jsonObject.toString();
            System.out.println(result);

}

public static void main(String a[]) {

new Hello().process();
}
}


但是当我执行这个程序时,我得到以下输出

{"type":"normal","text":"hello world","notifications":["user","user","user"]}


在输出中,我可以看到仅从字符串数组中选取了第一个单词;如何获得全文;

最佳答案

我不确定是否必须使用JsonParser,但这似乎可行

        for (String msg : notifications) {
//            JsonParser jsonParser = new JsonParser();
//            JsonReader reader = new JsonReader(new StringReader(msg));
//            reader.setLenient(true);
//            JsonElement element = jsonParser.parse(reader);
            JsonPrimitive prim = new JsonPrimitive(msg);
            array.add(prim);
        }


输出为:

{“类型”:“普通”,“文本”:“ Hello World”,“通知”:[“用户从Web1收到通知”,“用户从Web2收到通知”,“用户从Web3收到通知”]}}

10-08 13:49