为什么我的json文件中的换行符显示为字符“n”

时间:2013-12-18 09:40:35

标签: android json

我有一个Android应用程序,它应该从Web获取一个json文件并解析它。 我将json文件作为直接文件上传到我的网站,扩展名为.json

我的应用程序获取此文件,但是当我打印出其内容时,应该有一个换行符的任何地方,而是有一个“n”,当然json解析器不喜欢这样,我得到一个异常。

更新: 在查看解析输入流的代码后,我发现了问题:

BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "n");
        }

出于某种原因,在这个代码中,我的其他应用程序运行完美,我将“n”添加到“\ n”上!我想知道我是否意外删除了反斜杠。

2 个答案:

答案 0 :(得分:0)

我的猜测是你必须逃避斜线角色。
在您的网站上,您应该将"\\n"放在每个新行的json对象中。

答案 1 :(得分:0)

您必须使用

来转义斜杠字符
  

\\n

在json里面。

稍后您可以使用此代码从json解析字符串,

public String escapeJavaString(String st) {

    StringBuilder sb = new StringBuilder(st.length());

    for (int i = 0; i < st.length(); i++) {
        char ch = st.charAt(i);
        if (ch == '\\') {
            char nextChar = (i == st.length() - 1) ? '\\' : st
                    .charAt(i + 1);
            // Octal escape?
            if (nextChar >= '0' && nextChar <= '7') {
                String code = "" + nextChar;
                i++;
                if ((i < st.length() - 1) && st.charAt(i + 1) >= '0'
                        && st.charAt(i + 1) <= '7') {
                    code += st.charAt(i + 1);
                    i++;
                    if ((i < st.length() - 1) && st.charAt(i + 1) >= '0'
                            && st.charAt(i + 1) <= '7') {
                        code += st.charAt(i + 1);
                        i++;
                    }
                }
                sb.append((char) Integer.parseInt(code, 8));
                continue;
            }
            switch (nextChar) {
            case '\\':
                ch = '\\';
                break;
            case 'b':
                ch = '\b';
                break;
            case 'f':
                ch = '\f';
                break;
            case 'n':
                ch = '\n';
                break;
            case 'r':
                ch = '\r';
                break;
            case 't':
                ch = '\t';
                break;
            case '\"':
                ch = '\"';
                break;
            case '\'':
                ch = '\'';
                break;
            // Hex Unicode: u????
            case 'u':
                if (i >= st.length() - 5) {
                    ch = 'u';
                    break;
                }
                int code = Integer.parseInt(
                        "" + st.charAt(i + 2) + st.charAt(i + 3)
                                + st.charAt(i + 4) + st.charAt(i + 5), 16);
                sb.append(Character.toChars(code));
                i += 5;
                continue;
            }
            i++;
        }
        sb.append(ch);
    }
    return sb.toString();
}

请查看here以获取更多帮助。