2015-02-19 3 views
-1

У меня есть файл json, который я из Интернета и сохранен в моем приложении. Затем я прочитаю этот файл и создаю объект json. Но я не могу создать объект json. Это исключение я получаюJSON Создание объекта не работает

org.json.JSONException: Ожидаемое значение литерала на символ 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\": { .......... 

Что я делаю неправильно?

+0

Та же проблема, что и я, я просто конвертировал XML в JSON. Они преобразуют атрибуты в строку JSON, которая начинается с {"-attribute", 11}, мы получим проблему с этим. –

ответ

1

Там нет причин, чтобы избежать кавычек ("). Они являются частью того, как конструктор объекта JSON идентифицирует строку.

Только с помощью

JSONObject obj = new JSONObject(str);

должен быть тонкими.

Кроме того,

в «Комбинированный вид (% s)» эти две кавычки рассматриваются как разделители строк и СЛЕДУЕТ избегать, но это указывает на проблему с сервером, с которого вы получили это сообщение. Выйти из них сами по себе невозможно, потому что нет верного способа узнать, какие кавычки являются реальными и которые являются частью текста.

+0

Если я не заменяю это, я получаю следующую ошибку. org.json.JSONException: Unterminated object at character 447 of –

+1

@AnujKumarJha означает, что вам не хватает "{" или a "}".Вы все равно не должны избегать кавычек. – CurlyCorvus

0

На подтверждающих ваш выход JSON через Jlint это дает ошибку проверки, но на удаление места на строке 2 вашего выхода (это пространство намеренно? Или вы добавили его размещение вопроса по ошибке?)

"cdata", "value": "Text 

]]>" }, { "nam 

он успешно проверяется.

В любом случае, является ли пространство исходным источником ошибки или нет, как указано в CurlyCorvus, просто передайте строку в new JSONObject(str); без выхода из ".

+0

Если я не заменяю это, я получаю следующую ошибку. org.json.JSONException: Unterminated object at character 447 of –

+0

Ваш json правильный (без пробелов), передайте его как в конструкторе JSONObject(). –

0

Thans Mustafa и Curly.

Проблема была из-за цитаты отмечают в теге напр в оригинальной одно значение «значение»: «% 1 $ s до праздника»

Он работал хорошо, когда я заменил его на «значение» : «% 1 $ s до праздника»

Так что я думаю, что когда в нем присутствуют кавычки, рассматривайте его как новый объект.

Смежные вопросы