让我有一个字符串,json字符串。
{"cond":{"to_email":"b@b.c"},"ret":"all"}
现在我想在java中使用json simple parser解析它。
我正在给代码......
try{
//String s=request.getParameter("data");
String s="{\"cond\":{\"to_email\":\"b@b.c\"},\"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。我检查了一下。如何摆脱这个问题?
答案 0 :(得分:1)
事情很简单! 键“cond”表示复杂的JSONObject,但键“ret”表示一个String。因此,在这种情况下解析失败。我不知道你正在使用哪个JSON-libary,但是要查看JSONObject#getString(String key)方法来获取值。
祝你好运更新(使用我使用的JSON库)
try{
//String s=request.getParameter("data");
String s="{\"cond\":{\"to_email\":\"b@b.c\"},\"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();
}
答案 1 :(得分:1)
按照上面的回答,这是一个简单的解析器。
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\":\"b@b.c\"},\"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();
}
}
}
}
这会为您打印键和值对。我们可以为特定键添加条件。 关键:ret 价值:全部 关键词:cond 值:{“to_email”:“b @ b.c”}