如何将给定数据解析为 java 对象
how to parse given data into a java object
我想将下面给定的数据解析为某个 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 class 测试 {
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:
"}" ...
"," ...
您可以通过多种方式做到这一点。
首先,如果您的数据始终具有相同的格式,您可以简单地创建一些方法来根据需要创建 TreeMap 和 ArrayList。您可以使用 String.replace()、StringTokenizer、匹配器模式做任何您想做的事情。您可以将数据拆分为令牌,并根据您的需要将它们放入所需的数据结构中。我发现这种方式非常有效,一旦您更好地了解如何解析数据并提取所需内容,您就可以在许多其他示例中使用它。
如果您的数据格式为 JSON 那么可能有更简单的解析方法 it.You 可以很容易地将其解码为 Java 对象。
JSON 字符串格式不正确。尝试如下
{
"objectsTree":{"Address":[],"Customer":["Address"]},
"objectsSequence":["Customer","Address"]
}
JSON 键总是字符串 &
JSON 值可以是:
•A number (integer or floating point)
•A string (in double quotes)
•A Boolean (true or false)
•An array (in square brackets)
•An object (in curly braces)
•null.
请参阅以下具有格式正确的字符串及其输出的代码
String a = "{\r\n" +
"\"objectsTree\":{\"Address\":[],\"Customer\":[\"Address\"]},\r\n" +
"\"objectsSequence\":[\"Customer\",\"Address\"]\r\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
HashMap<String,Object> jo = (HashMap<String,Object>) mapper.readValue(a, HashMap.class);
System.out.println("result: "+ jo);
result: {objectsTree={Address=[], Customer=[Address]}, objectsSequence=[Customer, Address]}
用你的 json 字符串
String json ="{\"objectsTree\":\"{\"Address\":[],\"Customer\":[\"Address\"]}\",\"objectsSequence\":\"[\"Customer\",\"Address\"]\"}";
ObjectMapper mapper = new ObjectMapper();
HashMap<String,Object> jo = (HashMap<String,Object>) mapper.readValue(json, HashMap.class);
System.out.println("result: "+ jo);
error :
Exception in thread "main" org.codehaus.jackson.JsonParseException: Unexpected character ('A' (code 65)): was expecting comma to separate OBJECT entries
at [Source: java.io.StringReader@77d2b01b; line: 1, column: 20]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:943)
在您的 json 字符串中,对于键 objectsTree,值以 \" 开头,其匹配的 \" 在字符串 Address 之前关闭。这导致了解析错误。
"{\"Address
另外两个答案还说您的 json 字符串格式无效。
我还添加了支持的 json 值供您参考。
如果您更改为正确的格式,任何 json 解析器都可以工作,
这里的主要问题是输入根本不是有效的 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 对象,但我无法解析。字符串如下 -
{\"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 class 测试 {
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:
"}" ...
"," ...
您可以通过多种方式做到这一点。
首先,如果您的数据始终具有相同的格式,您可以简单地创建一些方法来根据需要创建 TreeMap 和 ArrayList。您可以使用 String.replace()、StringTokenizer、匹配器模式做任何您想做的事情。您可以将数据拆分为令牌,并根据您的需要将它们放入所需的数据结构中。我发现这种方式非常有效,一旦您更好地了解如何解析数据并提取所需内容,您就可以在许多其他示例中使用它。
如果您的数据格式为 JSON 那么可能有更简单的解析方法 it.You 可以很容易地将其解码为 Java 对象。
JSON 字符串格式不正确。尝试如下
{
"objectsTree":{"Address":[],"Customer":["Address"]},
"objectsSequence":["Customer","Address"]
}
JSON 键总是字符串 &
JSON 值可以是:
•A number (integer or floating point)
•A string (in double quotes)
•A Boolean (true or false)
•An array (in square brackets)
•An object (in curly braces)
•null.
请参阅以下具有格式正确的字符串及其输出的代码
String a = "{\r\n" +
"\"objectsTree\":{\"Address\":[],\"Customer\":[\"Address\"]},\r\n" +
"\"objectsSequence\":[\"Customer\",\"Address\"]\r\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
HashMap<String,Object> jo = (HashMap<String,Object>) mapper.readValue(a, HashMap.class);
System.out.println("result: "+ jo);
result: {objectsTree={Address=[], Customer=[Address]}, objectsSequence=[Customer, Address]}
用你的 json 字符串
String json ="{\"objectsTree\":\"{\"Address\":[],\"Customer\":[\"Address\"]}\",\"objectsSequence\":\"[\"Customer\",\"Address\"]\"}";
ObjectMapper mapper = new ObjectMapper();
HashMap<String,Object> jo = (HashMap<String,Object>) mapper.readValue(json, HashMap.class);
System.out.println("result: "+ jo);
error :
Exception in thread "main" org.codehaus.jackson.JsonParseException: Unexpected character ('A' (code 65)): was expecting comma to separate OBJECT entries
at [Source: java.io.StringReader@77d2b01b; line: 1, column: 20]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:943)
在您的 json 字符串中,对于键 objectsTree,值以 \" 开头,其匹配的 \" 在字符串 Address 之前关闭。这导致了解析错误。
"{\"Address
另外两个答案还说您的 json 字符串格式无效。 我还添加了支持的 json 值供您参考。 如果您更改为正确的格式,任何 json 解析器都可以工作,
这里的主要问题是输入根本不是有效的 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"]}}