0

this popping 例外をJSONObject.fromObjectここで 'true' = 'true' pq are a single quote within another single quotes にする必要がある場合、誰かがこの 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')"}}]}

4

2 に答える 2

1

バックスラッシュを使用して一重引用符をエスケープできます (Java 文字列リテラルを使用しているため、バックスラッシュ自体をエスケープする必要があります)。

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

変数を変更してコードを実行すると、次のjson出力が生成されます。

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

v1この文字列は、代わりに要素がuあり、値がトリミングされていないという点で、目的の出力とは異なります。ただし、それがコピー/貼り付けタイプかどうかはわかりません。それがあなたの求めているものなら、 parsed を変更するのは簡単JSONObjectです。

于 2013-01-10T01:54:52.047 に答える
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#'、o:'='、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 \')'}}]}]}

于 2013-01-10T11:47:54.170 に答える