代码之家  ›  专栏  ›  技术社区  ›  spakmad

GSON-JSON解析字符串与POJO

  •  0
  • spakmad  · 技术社区  · 6 年前

    奇怪的例子 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 回复  |  直到 6 年前
        1
  •  1
  •   dustinroepsch    6 年前

    如果 [[{readerme:{dumbme:meme}}]] json的格式是否适合 List<List<Alpha>> 对象,然后序列化文本字符串 [[{readerme:{dumbme:meme}}]] ,不会。

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

    由于此输出字符串是用json表示的字符串,因此它不再是 列表<列表<Alpha>>