作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将下面给定的数据解析为某个 java 对象,但我无法解析。字符串如下 -
{\"objectsTree\":\"{\"Address\":[],\"Customer\":[\"Address\"]}\",\"objectsSequence\":\"[\"Customer\",\"Address\"]\"}
我已经尝试将其解析为 HashMap 和 HashMap但这是返回格式错误的 JSON 异常,这是有道理的,因为太多双引号对象突然结束。我想按如下方式解析它-
{
"objectsTree":"{"Address":[],"Customer":["Address"]}",
"objectsSequence":"["Customer","Address"]"
}
在这里您可以看到 objectsTree 是针对一个字符串的一个对象,而 objectSequence 是另一个。具体来说,对象树应该是一个 TreeMap ,对象序列应该是一个 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/
我是一名优秀的程序员,十分优秀!