GSON JSON解析字符串与POJO

时间:2018-08-02 19:41:16

标签: java json gson

好奇的实例,其中gson解析器可以将JSON字符串解析为String,但是不能将该JSON字符串解析为它表示的原始对象。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;

public class Reader {
    public class Beta {
        String beta1;
        @Override
        public String toString() {
            return "{ beta1: " + this.beta1 + "}";
        }
    }
    public class Alpha {
        Beta beta;
        @Override
        public String toString() {
            return "{" + "beta: " + beta.toString() + "}";
        }
    }
    public static void main(String[] args) {
        Gson gson = new Gson();
        String example1 = "[[{beta:{beta1:beta2}}]]";
        String json = gson.toJson(example1);
        // this throws an error
        ArrayList<ArrayList<Alpha>> dog = gson.fromJson(json, new TypeToken<ArrayList<ArrayList<Alpha>>>(){}.getType());
        // this does not
        ArrayList<ArrayList<Alpha>> dog1 = gson.fromJson("[[{beta:{beta1:beta2}}]]", new TypeToken<ArrayList<ArrayList<Alpha>>>(){}.getType());
    }
}

1 个答案:

答案 0 :(得分:1)

如果[[{readerme:{dumbme:meme}}]]是针对您的List<List<Alpha>>对象的正确格式的json,则不会序列化文字字符串[[{readerme:{dumbme:meme}}]]

使用字符串调用gson.ToJson将输出json格式的字符串。实际上,您的字符串[[{readerme:{dumbme:meme}}]]将变为"[[{readerme:{dumbme:meme}}]]"。请注意添加的引号。 我认为将json变量的内容打印到控制台将帮助您理解我的意思。

由于此输出字符串是用json表示的字符串,因此它不再是List<List<Alpha>>的正确方案