使用simle json解析器的java中的JSON解析错误

时间:2016-07-24 15:03:07

标签: java json

让我有一个字符串,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。我检查了一下。如何摆脱这个问题?

2 个答案:

答案 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”}