Escape for net.sf.json.JSONObject

时间:2013-01-09 20:14:35

标签: java json json-lib

当我必须给JSONObject.fromObject这个弹出异常时'true'='true'pq是另一个单引号内的单引号,有人知道这个API有某种转义字符吗?

public static void main(String[] args) {

        String json = "{gA:[ {c:{f:'C#',o:'=',v1:' ('true' = 'true' ) ' }}]}";


        final Map<String, Object> map = new HashMap<String, Object>();



        try {

            JsonConfig cfg = new JsonConfig();
            cfg.setRootClass(LinkedHashMap.class);
            cfg.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);
            cfg.setHandleJettisonSingleElementArray(false);
            JSONObject jsonObjeto = JSONObject.fromObject(json, cfg);
            System.out.println(jsonObjeto.toString());
        } catch (final JSONException e) {

            e.printStackTrace();
        }


    }

例外:

net.sf.json.JSONException: Expected a ',' or '}' at character net.sf.json.JSONException: Expected a ',' or '}' at character 31 of {gA:[ {c:{f:'C#',o:'=',v1:' ('true' = 'true' ) ' }}]}  
    at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:499)  
    at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1099)  
    at net.sf.json.JSONObject.fromObject(JSONObject.java:159)  
    at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:348)  
    at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1008)  
    at net.sf.json.JSONObject.fromObject(JSONObject.java:159)  
    at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:348)  
    at net.sf.json.JSONArray._fromJSONTokener(JSONArray.java:1131)  
    at net.sf.json.JSONArray.fromObject(JSONArray.java:125)  
    at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:351)  
    at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1008)  
    at net.sf.json.JSONObject._fromString(JSONObject.java:1201)  
    at net.sf.json.JSONObject.fromObject(JSONObject.java:165)  
    at br.com.michel.json.JsonTest.main(JsonTest.java:28)

我想要的json的输出:

{“ga”:[{“c”:{“f”,“C#”,“o”:“=”,“v1”:“('true'='true')”}}] }

2 个答案:

答案 0 :(得分:1)

你可以使用反斜杠转义单引号(因为我们使用的是Java字符串文字,所以它们本身必须被转义):

String json = "{gA:[ {c:{f:'C#',o:'=',v1:' (\\'true\\' = \\'true\\' ) ' }}]}";

使用修改后的json变量运行代码会产生以下输出:

{"gA":[{"c":{"f":"C#","o":"=","v1":" ('true' = 'true' ) "}}]}

此字符串与所需输出的不同之处在于它具有元素v1而不是u,并且未修剪该值。不过,我不确定这是不是复制/粘贴类型。如果这就是您所追求的,那么修改已解析的JSONObject就足够了。

答案 1 :(得分:0)

当我把这个Json放进去的时候多说道:

{GA:[{C:{F: 'FIXO',O: '=',V1: 'T'}},{GO:[{C:{F: 'ID_USUARIO',O: '=' ,VC: '200'}},{C:{F: 'ID_PERFIL',O: '=',VC:'28 '}},{C:{F:' C#”,○: '=',V1 :'(\'true \'= \'true \')'}}]}]}

溢出此异常:

net.sf.json.JSONException:在{gA:[{c:{f:'FIXO',o:'=',v1:'T'}的字符131处预期为','或'}' },{GO:[{C:{F: 'ID_USUARIO',O: '=',VC: '1'}},{C:{F: 'ID_PERFIL',O: '=',VC:'1 '}},{c:{f:'C#',o:'=',v1:'(\'true \'= \'true \')'}}]}]}