2013-12-18 72 views
0

我有一個android應用程序應該從Web獲取json文件並對其進行分析。 我上傳的JSON文件到我的網站爲擴展直接文件上傳.json爲什麼我的json文件中的換行符顯示爲字符「n」

我的應用程序讀取這個文件,但是當我打印出來的內容,任何地方應該有一個換行符,有一個「N」相反,自然json解析器不喜歡這樣,我得到一個異常。

UPDATE: 看着我的代碼後,將分析我發現這個問題的輸入流:

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「!我想知道我是否意外刪除了反斜槓。

回答

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

0

我的猜測是你必須逃避斜槓字符。
這是在你的網站中,你應該把"\\n"放在每個新行的json對象中。

相關問題