在JSON JAVA中解析复杂字符串
我有一个非常复杂的字符串,如下所示在JSON JAVA中解析复杂字符串,java,regex,json,string,parsing,Java,Regex,Json,String,Parsing,我有一个非常复杂的字符串,如下所示 "data":"[ { "id": "123456", "from": { "name": "ABC", "id": "123" }, "message": "isafh", "story": "Best Story",
"data":"[
{
"id": "123456",
"from":
{
"name": "ABC",
"id": "123"
},
"message": "isafh",
"story": "Best Story",
"properties":
[
{
"name": "By",
"text": "PROUD TO BE AN INDIAN",
"href": "www.xyz.com"
}
],
"privacy":
{
"value": ""
},
"type": "photo",
"created_time": "2013-10-24T07:17:28+0000",
"updated_time": "2013-10-24T07:17:28+0000"
},
{
"id": "122423456",
"from":
{
"name": "ABCaasd",
"id": "124233"
},
"message": "isafh",
"story": "Best nice Story",
"properties":
[
{
"name": "By",
"text": "PROUD TO BE AN INDIAN",
"href": "www.abc.com"
}
],
"privacy":
{
"value": ""
},
"type": "photo",
"created_time": "2013-10-24T07:17:28+0000",
},
{
Similar data as above {... }
},
]"
"next token":"1233"
这里所有的JSON数据都在这些括号“[]”中,这些括号由“{…}”大括号分隔。
尝试了两件事一是二把所有的东西都放在一个JSON对象中,也尝试了一次无用的尝试来匹配regex“message:”但即使这样也没用
如何从所有大括号中查找消息、故事和属性。正则表达式不适合解析JSON或HTML文档等复杂数据结构。幸运的是,有一些快速、可靠和免费的图书馆可以很好地完成这项工作 请参阅,或可以解析中列出的JSON的其他库的列表(滚动到页面底部) 使用JSON.org的库解析JSON文档非常简单,如下所示:
String json = "{ \"message\" : \"Hi, this is the value for the key \\\"message\\\"\" }";
JSONObject myObject = new JSONObject(json); // This line actually parses the JSON text
System.out.println(myObject.getString("message"));
正则表达式不适合解析JSON或HTML文档等复杂数据结构。幸运的是,有一些快速、可靠和免费的图书馆可以很好地完成这项工作 请参阅,或可以解析中列出的JSON的其他库的列表(滚动到页面底部) 使用JSON.org的库解析JSON文档非常简单,如下所示:
String json = "{ \"message\" : \"Hi, this is the value for the key \\\"message\\\"\" }";
JSONObject myObject = new JSONObject(json); // This line actually parses the JSON text
System.out.println(myObject.getString("message"));
使用像google gson这样的json库 这是一个使用gson-1.7.1.jar测试的工作示例,但它也应该使用最新版本
public static void main(String[] args) {
String jsonData = "{\"data\":[{\"id\": \"123456\",\"from\": {\"name\": \"ABC\",\"id\": \"123\"},\"message\": \"isafh\",\"story\": \"Best Story\",\"properties\": [{\"name\": \"By\",\"text\": \"PROUD TO BE AN INDIAN\",\"href\": \"www.xyz.com\"}],\"privacy\": {\"value\": \"\"},\"type\": \"photo\",\"created_time\": \"2013-10-24T07:17:28+0000\",\"updated_time\": \"2013-10-24T07:17:28+0000\"},{\"id\": \"122423456\",\"from\": {\"name\": \"ABCaasd\",\"id\": \"124233\"},\"message\": \"isafh\",\"story\": \"Best nice Story\",\"properties\": [{\"name\": \"By\",\"text\": \"PROUD TO BE AN INDIAN\",\"href\": \"www.abc.com\"}],\"privacy\": {\"value\": \"\"},\"type\": \"photo\",\"created_time\": \"2013-10-24T07:17:28+0000\"}],\"next token\":\"1233\"}";
List<String> messages = parse(jsonData);
for (String message : messages) {
System.out.println(message);
}
}
public static List<String> parse(String jsonData) {
List<String> messages = new ArrayList<String>();
JsonElement jsonElement = new JsonParser().parse(jsonData);
JsonObject jsonTopObject = jsonElement.getAsJsonObject();
JsonArray jsonArray = jsonTopObject.getAsJsonArray("data").getAsJsonArray();
Iterator<JsonElement> iterator = jsonArray.iterator();
while (iterator.hasNext()) {
JsonObject jsonObject = iterator.next().getAsJsonObject();
messages.add(jsonObject.get("message").getAsString());
}
return messages;
}
publicstaticvoidmain(字符串[]args){
目前,该公司从以下几方面入手::““名称名称”和“名称名称”以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下的::::::::::::::““ABC”ABC\ \“ABC\ \ \ \“ABC\,,“id”以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下的????????????,,,7:17:28+0000\“,\”本次更新的时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:2013-10-10-10-10-10-24-24-10-10-10-10-10-10-10-10-10-10-10-10 10-10-10-10-10-10-10-10-10 10 10 10-10-10-10-10-10-10-10 10-10 10 10 10 10 10-6-6-6-6-6-6-6-10 10-6-6-10 10-10-6,来自来自以下,从从以下地点点点:::::,从从以下以下从以下以下以下从::::::“以下以下以下以下以下以下以下以下地点::::::::::::::::::“,“创建时间”:“2013-10-24T07:17:28+0000\“}],“下一个令牌”:“1233\”};
列表消息=解析(jsonData);
用于(字符串消息:消息){
System.out.println(消息);
}
}
公共静态列表解析(字符串jsonData){
列表消息=新建ArrayList();
JsonElement JsonElement=新的JsonParser().parse(jsonData);
JsonObject jsonTopObject=jsonElement.getAsJsonObject();
JsonArray JsonArray=jsonTopObject.getAsJsonArray(“数据”).getAsJsonArray();
迭代器迭代器=jsonArray.Iterator();
while(iterator.hasNext()){
JsonObject JsonObject=iterator.next().getAsJsonObject();
messages.add(jsonObject.get(“message”).getAsString());
}
返回消息;
}
请注意,为了有效,您提供的json数据做了一些小改动。例如,用“{”、“}”包装以形成json对象,并且在您创建的数据末尾:“{code>”创建时间“:“2013-10-24T07:17:28+0000”,},,因此最后一个coma已被删除。使用类似google gson的json库 这是一个使用gson-1.7.1.jar测试的工作示例,但它也应该使用最新版本
public static void main(String[] args) {
String jsonData = "{\"data\":[{\"id\": \"123456\",\"from\": {\"name\": \"ABC\",\"id\": \"123\"},\"message\": \"isafh\",\"story\": \"Best Story\",\"properties\": [{\"name\": \"By\",\"text\": \"PROUD TO BE AN INDIAN\",\"href\": \"www.xyz.com\"}],\"privacy\": {\"value\": \"\"},\"type\": \"photo\",\"created_time\": \"2013-10-24T07:17:28+0000\",\"updated_time\": \"2013-10-24T07:17:28+0000\"},{\"id\": \"122423456\",\"from\": {\"name\": \"ABCaasd\",\"id\": \"124233\"},\"message\": \"isafh\",\"story\": \"Best nice Story\",\"properties\": [{\"name\": \"By\",\"text\": \"PROUD TO BE AN INDIAN\",\"href\": \"www.abc.com\"}],\"privacy\": {\"value\": \"\"},\"type\": \"photo\",\"created_time\": \"2013-10-24T07:17:28+0000\"}],\"next token\":\"1233\"}";
List<String> messages = parse(jsonData);
for (String message : messages) {
System.out.println(message);
}
}
public static List<String> parse(String jsonData) {
List<String> messages = new ArrayList<String>();
JsonElement jsonElement = new JsonParser().parse(jsonData);
JsonObject jsonTopObject = jsonElement.getAsJsonObject();
JsonArray jsonArray = jsonTopObject.getAsJsonArray("data").getAsJsonArray();
Iterator<JsonElement> iterator = jsonArray.iterator();
while (iterator.hasNext()) {
JsonObject jsonObject = iterator.next().getAsJsonObject();
messages.add(jsonObject.get("message").getAsString());
}
return messages;
}
publicstaticvoidmain(字符串[]args){
目前,该公司从以下几方面入手::““名称名称”和“名称名称”以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下的::::::::::::::““ABC”ABC\ \“ABC\ \ \ \“ABC\,,“id”以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下的????????????,,,7:17:28+0000\“,\”本次更新的时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:以下时间点:2013-10-10-10-10-10-24-24-10-10-10-10-10-10-10-10-10-10-10-10 10-10-10-10-10-10-10-10-10 10 10 10-10-10-10-10-10-10-10 10-10 10 10 10 10 10-6-6-6-6-6-6-6-10 10-6-6-10 10-10-6,来自来自以下,从从以下地点点点:::::,从从以下以下从以下以下以下从::::::“以下以下以下以下以下以下以下以下地点::::::::::::::::::“,“创建时间”:“2013-10-24T07:17:28+0000\“}],“下一个令牌”:“1233\”};
列表消息=解析(jsonData);
用于(字符串消息:消息){
System.out.println(消息);
}
}
公共静态列表解析(字符串jsonData){
列表消息=新建ArrayList();
JsonElement JsonElement=新的JsonParser().parse(jsonData);
JsonObject jsonTopObject=jsonElement.getAsJsonObject();
JsonArray JsonArray=jsonTopObject.getAsJsonArray(“数据”).getAsJsonArray();
迭代器迭代器=jsonArray.Iterator();
while(iterator.hasNext()){
JsonObject JsonObject=iterator.next().getAsJsonObject();
messages.add(jsonObject.get(“message”).getAsString());
}
返回消息;
}
请注意,为了有效,您提供的json数据做了一些小改动。例如,用“{”、“}”包装成一个json对象,并且在数据的末尾,你有
“created_time:”2013-10-24T07:17:28+0000“,},
所以最后一个昏迷已经被移除。这对json来说一点也不复杂,十几个不同的Java/json工具包(见json.org)中的任何一个都可以轻松处理它,我建议使用Jackson(您可能需要和包)。对于JSON来说,这一点都不复杂,十几个不同的Java/JSON工具包(参见JSON.org)中的任何一个都可以轻松处理它。关于其他答案,我建议使用Jackson(您可能需要和包)。使用此JSONObject myObject时=新建JSONObject(json);它说构造函数没有将字符串定义为参数。我想我没有使用正确的包。你能告诉我应该使用哪个确切的包吗?目前我使用的是and jars。谢谢。@ashubhargave你可以在使用这个JSONObject myObject=new JSONObject(json)时从中下载jar;它说构造函数不是为