使用simle json解析器的java中的JSON解析错误
问题描述:
让我有一个字符串,json字符串。使用simle json解析器的java中的JSON解析错误
{"cond":{"to_email":"[email protected]"},"ret":"all"}
现在我想解析它在java中使用json简单的解析器。
我给的代码...
try{
//String s=request.getParameter("data");
String s="{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}";
JSONParser jsp=new JSONParser();
if(s == null || s.equals("")){
//problem
String json="{\"error\":\"error\",\"message\":\"no json data\"}";
response.getWriter().println(json);
}else{
JSONObject obj=(JSONObject) jsp.parse(s); //only object is allowed
JSONObject condObj=(JSONObject) jsp.parse(""+obj.get("cond"));
JSONObject returnObj=(JSONObject) jsp.parse(""+obj.get("ret"));
System.out.println(condObj);
}
现在的问题是,它给错误...
Unexpected character (a) at position 0.
但如果我删除"ret" : "all"
那么它的运作良好。
这里在这个例子中,我只打印了condObj,但是如果我打印retObj,那么它就是null。所以,问题是"ret" : "all"
部分...
但它是一个正确的json。我检查了它。如何摆脱这个问题?
答
事情很简单! 关键“cond”表示一个复杂的JSONObject,但关键字“ret”只是一个String。所以在这种情况下解析失败。我不知道你正在使用哪个JSON库,但是找一个JSONObject#getString(String key)方法来获取值。
好运
UPDATE(与JSON的lib我使用)
try{
//String s=request.getParameter("data");
String s="{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}";
if(s == null || s.equals("")){
//problem
String json="{\"error\":\"error\",\"message\":\"no json data\"}";
}else{
JSONObject obj= new JSONObject(s);
JSONObject condObj=(JSONObject) obj.getJSONObject("cond");
String returnObj= obj.getString("ret");
System.out.println(condObj);
System.out.println(returnObj);
}
}
catch (Exception e) {
e.printStackTrace();
}
答
只需按照上面的答案,这里是一个简单的解析器。
import java.util.Set;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class ParseJson {
public static void main(String[] args) throws Exception {
String s = "{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}";
JSONParser jsp = new JSONParser();
if (s == null || s.equals("")) {
String json = "{\"error\":\"error\",\"message\":\"no json data\"}";
} else {
JSONObject obj = (JSONObject) jsp.parse(s);
JSONObject condObj = (JSONObject) jsp.parse("" + obj.get("cond"));
Set<String> keys = obj.keySet();
for (String key : keys) {
System.out.println("Key : " + key);
System.out.print("Value : " +obj.get(key));
System.out.println();
}
}
}
}
这将为您输出键和值对。我们可以为特定的键添加条件。 重点:滞留 值:所有 重点:COND 值:{ “to_email”: “[email protected]”}
谢谢!它正在工作。 –