2015-09-02 3 views
0

Я пытаюсь сохранить свойства в документе Couchbase в Android. В свойствах хранится JSONArray с несколькими объектами JSONObjects.Couchbaselite-Exception: плохой или отсутствует JSON

Когда я document.putproperties(myproperties)couchbaseliteexception с состояние 400 и сообщение «bad or missing json" is thrown».

Так JSONArray выглядит следующим образом:

"some_prop" -> "[ 
{ 
    "content":"someContent", 
    "key2":"", 
    "key3":"", 
    "key4":"", 
    "month":8, 
    "day":3, 
    "key5":115 
}, 
{ 
    "content":"Some other content", 
    "key2":"something", 
    "key3":"", 
    "key4":"", 
    "month":8, 
    "day":3, 
    "key5":115 
}]" 

Может кто-нибудь сказать мне, Что проблема с этим JSON?

EDIT: JSONArray с соответствующим ключом сохраняется в HashMap, как это объясняется в: http://developer.couchbase.com/mobile/develop/guides/couchbase-lite/native-api/document/index.html

EDIT 2: метод, где выполняется обновление и JSONArray заполнен:

private void updateDoc(ArrayList<MyObject> objects) { 
    Document document = getDocument(); 

    // Update the document with more data 
    Map<String, Object> updatedProperties = new HashMap<>(); 

    JSONArray objectArray = new JSONArray(); 

    //fill array with data 
    for(MyObject element : objects) { 
     JSONObject jsonObjects = element.toJSONObject(); 
     if(jsonObjects != null) { 
      objectArray.put(jsonObjects); 
     } 
    } 

    //set data to property map 
    updatedProperties.put(MYOBJECT_PROP_IDENTIFIER, objectArray); 

    try { 
     // Save properties to the Couchbase local Couchbase Lite DB 
     document.putProperties(updatedProperties); 
    } catch (CouchbaseLiteException e) { 
    } 
} 
+1

Я думаю, что «some_prop» -> «должно быть как« some_prop »:« –

+0

Я просто получил это как из отладчика из Android Studio. В couchbase свойства сохраняются в хэш-карте. поэтому добавленный JSONArray на карте через myproperties.put («some_prop», myJSONArray). Я следил за гидом в: http://developer.couchbase.com/mobile/develop/guides/couchbase-lite/native-api/document/index.html –

ответ

0

Наконец я нашел решение проблемы: я не использую JSONObject или JSONArray больше, но сохранить данные в ArrayList и поставить каждый элемент непосредственно в базу данных. поэтому у меня нет массива со всеми элементами, которые содержат много отдельных элементов в документе. Для доступа к ним позже я сохраняю также количество элементов в БД. Каждый элемент имеет индекс как префикс, чтобы его можно было идентифицировать позже. Это не очень хороший способ, но он работает.

0

Не уверен, если это то, что вы ищете,

вы также можете использовать что-то вроде http://jsonlint.com, чтобы проверить ваш сын

{ 
    "some_prop": [ 
     { 
      "content": "someContent", 
      "key2": "", 
      "key3": "", 
      "key4": "", 
      "month": 8, 
      "day": 3, 
      "key5": 115 
     }, 
     { 
      "content": "Some other content", 
      "key2": "something", 
      "key3": "", 
      "key4": "", 
      "month": 8, 
      "day": 3, 
      "key5": 115 
     } 
    ] 
} 
+0

Проблема в том, что JSONArray на уровне высоких уровней в карта есть. поэтому «some_prop» является ключом следующего JSONArray. –

+0

@e_card показать нам весь метод? – Hades

+0

Я положил его в Edit 2 на сообщение. –

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