JSON对象创建失败

时间:2015-02-19 10:10:18

标签: java android json

我有json文件,我从互联网上下来并保存到我的应用程序。然后我读取此文件并创建json对象。但我无法创建json对象。  这是我得到的例外

org.json.JSONException:{\" resources \":{..........

的字符3处的预期文字值

下面是我读取输入流和创建json对象的代码

 private JSONObject readFileFromInpputStream(InputStream inst) throws JSONException
    {
        // TODO Auto-generated method stub
        StringBuilder responseStrBuilder=null;
        try { 
            BufferedReader streamReader = new BufferedReader(new InputStreamReader(inst, "UTF-8")); 
            responseStrBuilder = new StringBuilder();

            String inputStr;
            while ((inputStr = streamReader.readLine()) != null){
                responseStrBuilder.append(inputStr);  
            }
        }
        catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String str = responseStrBuilder.toString();
        String k=str.replace("\"", "\\\"");
       // String m =k.replaceAll("\t", "");
       // String s= m.replaceAll("\n", "");
        //String p = s.replaceAll("\\s", "");
        Log.i(loggerName, loggerName + " str " +str);
        //Log.i(loggerName, loggerName + " k " +p);
        JSONObject obj = new JSONObject(k);
        return obj;
    }

下面是输出字符串

   {
    "resources": {
        "-xmlns:xliff": "urn:oasis:names:tc:xliff:document:1.2",
        "string": [
            {
                "name": "sample1",
                "value": "To <xliff:g id=\"receiver_name\"> Europe </xliff:g>"
            },
            {
                "name": "cdata",
                "value": "<![CDATA[<p>Text<p>]]>"
            },
            {
                "name": "content_description_sample",
                "value": " <b>Something</b>"
            },
            {
                "name": "countdown",
                "value": " <xliff:g id="time" example="5days">%1$s</xliff:g> until holiday"
            },
            {
                "name": "picker_combined_view_fmt",
                "value": " Combined view (<xliff:g id="count">%s</xliff:g>)"
            },
            {
                "name": "configure_email_text",
                "value": "No corporate email accounts have been configured on this device. To configure them, click <b>Here</b> "
            },
            {
                "name": "invalid_credentials",
                "value": "Authentication failed. Enter valid credentials."
            },
            {
                "name": "link",
                "value": "<b>Hello World</b> This is a test of the URL <a href=\"http://www.example.com/\">Example</a>"
            },
            {
                "name": "bold",
                "value": "<b>This text is bold</b>"
            },
            {
                "name": "emphasis",
                "value": "<em>This text is emphasized</em>"
            },
            {
                "name": "check_availability_button",
                "value": "Check availability How are you"
            }
        ],
        "string-array": [
            {
                "name": "Array1",
                "item": [
                    "en_US",
                    "en_GB"
                ]
            },
            {
                "name": "Array2",
                "item": [
                    "en_US",
                    "en_GB"
                ]
            }
        ]
    }
}{
    \"resources\": {
        \"-xmlns: xliff\": \"urn: oasis: names: tc: xliff: document: 1.2\",
        \"string\": [
            {
                \"name\": \"sample1\",
                \"value\": \"To<xliff: gid=\\"receiver_name\\">Europe</xliff: g>\"
            },
            {
                \"name\": \"cdata\",
                \"value\": \"<![
                    CDATA[
                        <p>Text<p>
                    ]
                ]>\"
            },
            {
                \"name\": \"content_description_sample\",
                \"value\": \"<b>Something</b>\"
            },
            {
                \"name\": \"countdown\",
                \"value\": \"<xliff: gid=\"time\"example=\"5days\">%1$s</xliff: g>untilholiday\"
            },
            {
                \"name\": \"picker_combined_view_fmt\",
                \"value\": \"Combinedview(<xliff: gid=\"count\">%s</xliff: g>)\"
            },
            {
                \"name\": \"configure_email_text\",
                \"value\": \"Nocorporateemailaccountshavebeenconfiguredonthisdevice.Toconfigurethem,
                click<b>Here</b>\"
            },
            {
                \"name\": \"invalid_credentials\",
                \"value\": \"Authenticationfailed.Entervalidcredentials.\"
            },
            {
                \"name\": \"link\",
                \"value\": \"<b>HelloWorld</b>ThisisatestoftheURL<ahref=\\"http: //www.example.com/\\">Example</a>\"
            },
            {
                \"name\": \"bold\",
                \"value\": \"<b>Thistextisbold</b>\"
            },
            {
                \"name\": \"emphasis\",
                \"value\": \"<em>Thistextisemphasized</em>\"
            },
            {
                \"name\": \"check_availability_button\",
                \"value\": \"CheckavailabilityHowareyou\"
            }
        ],
        \"string-array\": [
            {
                \"name\": \"Array1\",
                \"item\": [
                    \"en_US\",
                    \"en_GB\"
                ]
            },
            {
                \"name\": \"Array2\",
                \"item\": [
                    \"en_US\",
                    \"en_GB\"
                ]
            }
        ]
    }
}

以下是我得到的例外

org.json.JSONException: Expected literal value at character 3 of {  \"resources\": { ..........

我做错了什么?

3 个答案:

答案 0 :(得分:1)

没有理由逃避引号(&#34;)。它们是json对象构造函数如何识别字符串的一部分。

只需使用

JSONObject obj = new JSONObject(str);

应该没问题。

此外,

in&#34;组合视图(%s)&#34;这两个引号被视为字符串分隔符,应该被转义,但它表明您收到此消息的服务器存在问题。自己逃避这些是不可能的,因为没有确定的方法可以知道哪些引号是真实的,哪些是文本的一部分。

答案 1 :(得分:0)

在通过Jlint验证您的JSON输出时,它会给出验证错误,但是在删除输出第2行的空间时(是故意的空间?还是在发布问题时添加了它?)

 "cdata", "value": "Text

]]>" }, { "nam

验证成功。

在任何情况下,空格是否是错误的初始来源,如CurlyCorvus所说,只需将字符串传递给new JSONObject(str);而不转义"

答案 2 :(得分:0)

Thans Mustafa和Curly。

问题是由于标记中的引号 原来一个值的前者是 “价值”:“%1 $ s直到假期”

当我将其替换为时,它工作正常 “价值”:“%1 $ s直到假期”

所以我猜当里面有引号时会把它当作新对象。