2012-09-06 2 views
13

Я использую org.json и у меня есть, что JSON в строке:Создание JSONObject из строки в Java (org.json)

{"hours":["1","2","3","4","5","6","7","8","9","10","11"]}

Когда я пытаюсь создать новый JSONObject из этой строки, Я получаю следующую ошибку:

Value of type ..String cannot be converted to JSONObject. 

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

EDIT: предполагая, ул имеет содержание:

JSONObject jObject = new JSONObject(str); 

EDIT2: Вот реальная строка:

{"hours":["1","2","3","4","5","6","7","8","9","10","11"],"lessons":["\u05d2\u05d9\u05d0,\u05ea\u05dc\u05de,\u05e2\u05e8\u05d1,\u05e4\u05d9\u05e1,\u05d1\u05d9\u05d5,\n\u05d6\u05d9\u05d5,\u05d5\u05d9\u05d9,\u05dc\u05d5\u05d9,\u05e4\u05d1\u05dc,\u05e8\u05d9\u05d9,","\u05d2\u05d9\u05d0,\u05ea\u05dc\u05de,\u05e2\u05e8\u05d1,\u05e4\u05d9\u05e1,\u05d1\u05d9\u05d5,\n\u05d6\u05d9\u05d5,\u05d5\u05d9\u05d9,\u05dc\u05d5\u05d9,\u05e4\u05d1\u05dc,\u05e8\u05d9\u05d9,","\u05d7\u05e0\"\u05d2 \u05d1\u05e0\u05d9\u05dd,\u05d7\u05e0\"\u05d2 \u05d1\u05e0\u05d5\u05ea\n\u05d9\u05de\u05e4\u05d5\u05dc\u05e1\u05e7\u05d9 \u05dc,\u05e0\u05d0\u05d5\u05e8 \u05de\u05dc\u05d9","\u05e1\u05e4\u05e8\u05d5\u05ea\n\u05d6\u05d9\u05dc\u05d3\u05de\u05df \u05d0\u05d5\u05e8\u05dc\u05d9","\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea\n\u05d1\u05e9\u05d9 \u05e9\u05d5\u05dc\u05de\u05d9\u05ea","\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea\n\u05d1\u05e9\u05d9 \u05e9\u05d5\u05dc\u05de\u05d9\u05ea","\u05ea\u05e0\",\u05e2\u05e8\u05d1,\u05e6\u05e8\u05e4,\u05e7\u05d5\u05dc,\u05d1\u05d9\u05d5,\n\u05e9\u05d7\u05e3,\u05de\u05d6\u05dc,\u05dc\u05e1\u05e7,\u05d8\u05d5\u05e4,\u05dc\u05d5\u05d9,","\u05ea\u05e0\",\u05e2\u05e8\u05d1,\u05e6\u05e8\u05e4,\u05e7\u05d5\u05dc,\u05d1\u05d9\u05d5,\n\u05e9\u05d7\u05e3,\u05de\u05d6\u05dc,\u05dc\u05e1\u05e7,\u05d8\u05d5\u05e4,\u05dc\u05d5\u05d9,","\u05e2\u05e8\u05d1,\u05e7\u05d5\u05dc,\u05d1\u05d9\u05d5,\u05d8\u05db\",\u05e8\u05d5\u05e1,\n\u05dc\u05d5\u05d9,\u05e7\u05de\u05d7,\u05d1\u05e1\u05d5,\u05d5\u05e7\u05e1,\u05e6\u05d5\u05e8,","\u05e2\u05e8\u05d1\u05d9,\u05e7\u05d5\u05dc\u05e0,\u05d1\u05d9\u05d5\u05d8,\u05d8\u05db\"\u05dd\n\u05dc\u05d5\u05d9,\u05d1\u05e1\u05d5\u05df,\u05d5\u05e7\u05e1,\u05e6\u05d5\u05e8",""]} 

EDIT3: Наконец, вот мой код, надеюсь, вы можете исправить эту проблему.

StringBuilder str = new StringBuilder(); 
     TextView textView = new TextView(this); 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet("http://ohel-shem.com/~iApplication/appdata.php?pass=12345&request=cp&day=4%20&class=7&layer=12"); 
     Log.d("MyTag","Before"); 
     HttpResponse response = client.execute(request); 

//  Get the response 
     BufferedReader rd = new BufferedReader 
      (new InputStreamReader(response.getEntity().getContent())); 

     String line = ""; 
     while ((line = rd.readLine()) != null) { 
      str.append(line); 
     } 
     Log.d("MyTag","hello"); 
     String s = str.toString(); 
       s= s.replaceAll("\n", "\\n"); 
       JSONObject json = new JSONObject(s); //Occures an error converting string to jsonobject 
+0

делает ваш код на самом деле имеют фигурную скобку в конце? очевидно, не так, как это не будет компилироваться. – ajon

+0

Вы забыли включить новое ключевое слово? если вы забудете новое ключевое слово, тогда компилятор подумает, что вы просто передаете его в JSONObject, который был бы незаконным. – ajon

+0

Вот как написано (изменено мое задание) – idish

ответ

18

Добро пожаловать в удивительный мир \ п нарушая ваш анализатор.

\ n указывает символ новой строки, я точно не знаю, почему он разрывает синтаксический анализатор, но добавление \ к нему будет задерживать символ управления.

@Test 
public void test() throws JSONException { 

     String s = 
     "{\"hours\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\"],\"lessons\":[\"\u05d2\u05d9\u05d0,\u05ea\u05dc\u05de,\u05e2\u05e8\u05d1,\u05e4\u05d9\u05e1,\u05d1\u05d9\u05d5,\n\u05d6\u05d9\u05d5,\u05d5\u05d9\u05d9,\u05dc\u05d5\u05d9,\u05e4\u05d1\u05dc,\u05e8\u05d9\u05d9,\",\"\u05d2\u05d9\u05d0,\u05ea\u05dc\u05de,\u05e2\u05e8\u05d1,\u05e4\u05d9\u05e1,\u05d1\u05d9\u05d5,\n\u05d6\u05d9\u05d5,\u05d5\u05d9\u05d9,\u05dc\u05d5\u05d9,\u05e4\u05d1\u05dc,\u05e8\u05d9\u05d9,\",\"\u05d7\u05e0\\\"\u05d2 \u05d1\u05e0\u05d9\u05dd,\u05d7\u05e0\\\"\u05d2 \u05d1\u05e0\u05d5\u05ea\n\u05d9\u05de\u05e4\u05d5\u05dc\u05e1\u05e7\u05d9 \u05dc,\u05e0\u05d0\u05d5\u05e8 \u05de\u05dc\u05d9\",\"\u05e1\u05e4\u05e8\u05d5\u05ea\n\u05d6\u05d9\u05dc\u05d3\u05de\u05df \u05d0\u05d5\u05e8\u05dc\u05d9\",\"\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea\n\u05d1\u05e9\u05d9 \u05e9\u05d5\u05dc\u05de\u05d9\u05ea\",\"\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea\n\u05d1\u05e9\u05d9 \u05e9\u05d5\u05dc\u05de\u05d9\u05ea\",\"\u05ea\u05e0\\\",\u05e2\u05e8\u05d1,\u05e6\u05e8\u05e4,\u05e7\u05d5\u05dc,\u05d1\u05d9\u05d5,\n\u05e9\u05d7\u05e3,\u05de\u05d6\u05dc,\u05dc\u05e1\u05e7,\u05d8\u05d5\u05e4,\u05dc\u05d5\u05d9,\",\"\u05ea\u05e0\\\",\u05e2\u05e8\u05d1,\u05e6\u05e8\u05e4,\u05e7\u05d5\u05dc,\u05d1\u05d9\u05d5,\n\u05e9\u05d7\u05e3,\u05de\u05d6\u05dc,\u05dc\u05e1\u05e7,\u05d8\u05d5\u05e4,\u05dc\u05d5\u05d9,\",\"\u05e2\u05e8\u05d1,\u05e7\u05d5\u05dc,\u05d1\u05d9\u05d5,\u05d8\u05db\\\",\u05e8\u05d5\u05e1,\n\u05dc\u05d5\u05d9,\u05e7\u05de\u05d7,\u05d1\u05e1\u05d5,\u05d5\u05e7\u05e1,\u05e6\u05d5\u05e8,\",\"\u05e2\u05e8\u05d1\u05d9,\u05e7\u05d5\u05dc\u05e0,\u05d1\u05d9\u05d5\u05d8,\u05d8\u05db\\\"\u05dd\n\u05dc\u05d5\u05d9,\u05d1\u05e1\u05d5\u05df,\u05d5\u05e7\u05e1,\u05e6\u05d5\u05e8\",\"\"]}"; 
     s= s.replaceAll("\n", "\\n"); 
     JSONObject json = new JSONObject(s); 
    } 

работает нормально.

Редактировать: глядя на ваш код, вам повезло. Некоторые службы иногда добавляют сумасшедшего персонажа в начало фида, и похоже, что это произошло здесь. Вам просто нужно обрезать его из строки.

Пример:

s = s.substring(s.indexOf("{")); 
+0

Вау, он работает, но когда я попытался реализовать его на своем собственном коде, этого не произошло. Я собираюсь дать вам свой код, вы не можете поверить, сколько времени я застрял в этом вопросе здесь, я буду очень рад, если вы мне поможете. – idish

+0

Обновленный мой вопрос еще раз, спасибо за вашу помощь. – idish

+0

ОК работает в моем тесте. – MikePatel

2
import org.json.JSONException; 
import org.json.JSONObject; 

public class JSONTest { 

    public static void main(String[] args) throws JSONException { 
     String str = "{\"hours\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\"]}"; 
     JSONObject jsonObject = new JSONObject(str); 
     System.out.println(jsonObject); 
    } 
} 

Выход: {"hours":["1","2","3","4","5","6","7","8","9","10","11"]}

+0

Отлично, он работает на самом деле, но вы можете посмотреть «EDIT 2» (в моем вопросе выше), это настоящая строка, которую я пытаюсь преобразовать в jsonobject. На самом деле, если бы я мог конвертировать поток в jsonobject, было бы намного лучше, потому что я получаю эту строку с сервера – idish

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