java - 如何将给定的数据解析为java对象

标签 java json parsing hashmap treemap

我想将下面给定的数据解析为某个 java 对象,但我无法解析。字符串如下 -

{\"objectsTree\":\"{\"Address\":[],\"Customer\":[\"Address\"]}\",\"objectsSequence\":\"[\"Customer\",\"Address\"]\"}

我尝试过将其解析为HashMap和HashMap 但这会返回格式错误的 JSON 异常,这是有道理的,因为太多双引号对象突然结束。我想按如下方式解析它-

{
"objectsTree":"{"Address":[],"Customer":["Address"]}",
"objectsSequence":"["Customer","Address"]"
}

在这里您可以看到,objectsTree 是一个针对一个字符串的对象,而 objectSequence 是另一个对象。具体来说,对象树应该是树形图,对象序列应该是ArrayList。

任何想法我应该如何进行。

代码更新-

包org.syncoms.backofficesuite.controller;

导入java.util.HashMap;

导入com.google.gson.Gson;

公开课测试{

public static void main(String[] args) {

    //String json = "{\"Success\":true,\"Message\":\"Invalid access token.\"}";
    String json ="{\"objectsTree\":\"{\"Address\":[],\"Customer\":[\"Address\"]}\",\"objectsSequence\":\"[\"Customer\",\"Address\"]\"}";
    Gson jsonParser = new Gson();
    @SuppressWarnings("unchecked")
    HashMap<String,Object> jo = (HashMap<String,Object>) jsonParser.fromJson(json, HashMap.class);
    System.out.println(jo);
    //Assert.assertNotNull(jo);
    //Assert.assertTrue(jo.get("Success").getAsString());


}

}

我收到的错误 -

Exception in thread "main" com.google.gson.JsonParseException: Failed parsing JSON source: java.io.StringReader@201644c9 to Json
    at com.google.gson.JsonParser.parse(JsonParser.java:59)
    at com.google.gson.Gson.fromJson(Gson.java:443)
    at com.google.gson.Gson.fromJson(Gson.java:396)
    at com.google.gson.Gson.fromJson(Gson.java:372)
    at org.syncoms.backofficesuite.controller.Test.main(Test.java:16)
Caused by: com.google.gson.ParseException: Encountered " <IDENTIFIER_SANS_EXPONENT> "Address "" at line 1, column 19.
Was expecting one of:
    "}" ...
    "," ...

最佳答案

这里的主要问题是输入根本不是有效的 JSON 字符串,并且没有 JSON 解析器会接受它。必须转义双引号。 有效的 JSON 字符串如下:

String jsonInput = "{\"objectsTree\":\"{\\\"Address\\\":[],\\\"Customer\\\":[\\\"Address\\\"]}\",\"objectsSequence\":\"[\\\"Customer\\\",\\\"Address\\\"]\"}";

这可以使用 Jackson 等进行解析:

ObjectMapper om = new ObjectMapper();
TypeFactory tf = om.getTypeFactory();
JavaType mapType = tf.constructMapType(HashMap.class, String.class, String.class);
Map<String, String> map = (Map<String, String>)om.readValue(jsonInput, mapType);
System.out.println(map);

打印输出是:

{objectsSequence=["Customer","Address"], objectsTree={"Address":[],"Customer":["Address"]}}

关于java - 如何将给定的数据解析为java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31988187/

相关文章:

Java - 正则表达式 - 需要 1-12 的月份

javascript - 我在使用 xampp 时无法在 chrome 上调用 ajax

php - 为什么这个 ajax 帖子给我一个错误? ajax post是否需要返回 "true"或 "false"?

algorithm - 具有优先级的方程(表达式)解析器?

c++ - spirit 解析器输出中的附加符号

java - 数组上的克隆方法是深拷贝还是浅拷贝?

java - 从 spring 3 Controller 发出 http 请求的最佳方法

java - GWT 请求工厂的 ACL

php - JSON 到 PHP,然后是 foreach?

ios - 获取每个 "OtherUser"解析核心数据库的最新记录