Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将给定数据解析为java对象_Java_Json_Parsing_Hashmap_Treemap - Fatal编程技术网

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

如何将给定数据解析为java对象,java,json,parsing,hashmap,treemap,Java,Json,Parsing,Hashmap,Treemap,我想将下面给定的数据解析到某个java对象中,但我无法解析。字符串如下- {\"objectsTree\":\"{\"Address\":[],\"Customer\":[\"Address\"]}\",\"objectsSequence\":\"[\"Customer\",\"Address\"]\"} 我已经尝试将其解析为HashMap和HashMap 但这会返回格式错误的JSON异常,这是有意义的,因为太多双引号对象会突然结束。我想对其进行如下分析- { "objectsTree":"{

我想将下面给定的数据解析到某个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());


}
publicstaticvoidmain(字符串[]args){
//字符串json=“{\'Success\”:true,\'Message\':\'Invalid access token.\'}”;
字符串json=“{\'objectsTree\”:\“{\'Address\”:[],\“Customer\”:[\“Address\”]}\,\“objectsSequence\”:\“[\“Customer\”,\“Address\”]\”;
Gson-jsonParser=new-Gson();
@抑制警告(“未选中”)
HashMap jo=(HashMap)jsonParser.fromJson(json,HashMap.class);
系统输出打印LN(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:
    "}" ...
    "," ...
线程“main”com.google.gson.JsonParseException中的异常:解析JSON失败来源:java.io。StringReader@201644c9到Json 位于com.google.gson.JsonParser.parse(JsonParser.java:59) 位于com.google.gson.gson.fromJson(gson.java:443) 位于com.google.gson.gson.fromJson(gson.java:396) 位于com.google.gson.gson.fromJson(gson.java:372) 位于org.syncoms.backofficesuite.controller.Test.main(Test.java:16) 原因:com.google.gson.ParseException:在第1行第19列遇到“地址”。 我期待的是: "}" ... "," ...
有多种方法可以做到这一点

首先,如果您的数据总是具有相同的格式,您可以简单地创建一些方法,这些方法将根据需要创建树映射和ArrayList。使用String.replace()、StringTokenizer和matcher模式,您可以做任何事情。您可以将数据拆分为令牌,并根据需要将它们放入所需的数据结构中。我发现这种方法非常有效,一旦您更好地了解如何解析数据和提取所需内容,您就可以在许多其他示例中使用这种方法


如果您的数据是JSON格式的,那么可能有更简单的解析方法。您可以很容易地将其解码为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]}
String a=“{\r\n”+
“\'objectsTree\':{\'Address\':[],\'Customer\':[\'Address\']}\r\n”+
“\”objectsSequence\”:[\”客户\“,\”地址\“]\r\n”+
"}";
ObjectMapper mapper=新的ObjectMapper();
HashMap jo=(HashMap)mapper.readValue(a,HashMap.class);
System.out.println(“结果:+jo”);
结果:{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)
String json=“{\'objectsTree\”:\“{\'Address\”:[],\“Customer\”:[\'Address\']}\,\“objectsSequence\”:\“[\'Customer\”,\'Address\']\”;
ObjectMapper mapper=新的ObjectMapper();
HashMap jo=(HashMap)mapper.readValue(json,HashMap.class);
System.out.println(“结果:+jo”);
错误:
线程“main”org.codehaus.jackson.JsonParseException中出现异常:意外字符('A'(代码65)):应使用逗号分隔对象条目
在[来源:java.io。StringReader@77d2b01b;行:1,列:20]
位于org.codehaus.jackson.JsonParser.\u constructError(JsonParser.java:943)
在json字符串中,对于key objectsTree,值以\“开头,其匹配\”在字符串地址之前关闭。这导致了分析错误

“{\”地址

另外两个答案也表示json字符串的格式无效。 我还添加了支持的json值供您参考。
如果更改为正确的格式,任何json解析器都可以工作,

这里的主要问题是输入不是有效的json字符串,没有json解析器会接受它。必须转义doulbe qoutes。 有效的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);

发布一个完整的最小代码示例,再现错误,以及错误的完整堆栈跟踪我已在问题中添加了代码和错误,请检查更新的问题谢谢您的输入,但在我的场景中,我永远不会更改字符串,因为它太动态,我可以接收任何内容,但格式将相同。表示一个树p和一个ArrayList。我上面给出的代码也不能解析这个字符串,但是,这是一个有效的JSON字符串。示例代码运行良好。尝试Jackson Parser。您给出的答案是正确的,但是这并不能解决我的问题,但我从您的输入中得到了想法,我通过更改输入模式得到了解决方案总共。谢谢。这不是更详细的解释。看我的答案。
{objectsSequence=["Customer","Address"], objectsTree={"Address":[],"Customer":["Address"]}}