2016-12-10 9 views
0

Скорее всего, эта проблема связана с тем, что JSONObject (org.json.JSONObject) несовместим с облачной библиотекой.Cloudant Library добавляет ненужные свойства при сохранении документа

Есть ли альтернативный способ использования любого другого объекта?

Я использую ниже Cloudant библиотек,

<dependency> 
      <groupId>com.cloudant</groupId> 
      <artifactId>cloudant-client</artifactId> 
      <version>2.6.2</version> 
     </dependency> 

Вот мой код

package data.repositories; 

import org.json.JSONObject; 
import com.cloudant.client.api.*; 
import com.cloudant.client.api.CloudantClient; 
import com.cloudant.client.api.Database; 
import com.cloudant.client.api.model.Response; 
import util.Config; 

public class DatabaseRepository { 

    CloudantClient client = ClientBuilder.account(Config.CLOUDANT_ACCOUNT_NAME) 
    .username(Config.CLOUDANT_USER_NAME) 
    .password(Config.CLOUDANT_PASSWORD).build(); 

    public DatabaseRepository() { 
JSONObject 
    } 

    public void Save(String dbName) { 
     Database db = client.database("dbTempName", true); 
     JSONObject jsonObject = new JSONObject("{hello: data}"); 
     db.save(jsonObject); 
    } 
} 

Документ сохраняется в базе данных Cloudant,

{ 
    "_id": "1c7f223f74a54e7c9f4c8a713feaa537", 
    "_rev": "1-a3cd12379eec936b61f899c8278c9d62", 
    "map": { 
    "hello": "data" 
    } 
} 

ответ

0

В вопросе Кажется, что org.json.JSONObject И не совместим с облачной клиентской библиотекой. Я попытался с объектом google, он работает хорошо для меня.

Проблема была устранена с помощью google com.google.gson.JsonObject вместо org.json.JSONObject.

Правильный Полный код приведен ниже,

Database db = client.database("dbTempName", true); 

    // Used google.gson.JsonObject instead of org.json.JSONObject. 
    com.google.gson.JsonParser parser = new com.google.gson.JsonParser(); 
    com.google.gson.JsonObject jsonObject = parser.parse("{\"hello\": \"data\"}").getAsJsonObject(); 

    db.save(jsonObject); 
1

Я не знаком с Cloudant но я предполагаю, что JsonObject имеет свойство «map», которое содержит ваши json-строковые данные (вероятно, есть мой Свойство массива тоже), а облачный сериализует его в json, добавляя эти ненужные значения.

мои предложения:

1) попытаться сохранить строку JSON непосредственно как db.save ("{привет: данные}"), чтобы избежать Сериализация

2), если вам действительно нужно создать JSONObject попробуйте настроить процесс сериализации cloudant, чтобы избежать дополнительных полей.

в ответ на комментарий:

от того, что я прочитал here, то я думаю, что вам нужен POJO, который когда сериализован в JSON будет выглядеть следующим образом:

{ «привет»: «данные» }

что-то вроде:

public class MyClass implements Serializable { 
    String hello; 

    public MyClass(String hello) { 
     this.hello = hello; 
    } 

    public String getHello() { 
     return hello; 
    } 
} 

затем сохраните его как:

db.save (новый MyClass ("data"));

или вы можете использовать HashMap вместо POJO:

Map<String, Object> map = new Hashmap ... 
map.put("hello", "data"); 
db.save(map); 
+0

db.save («{привет: данные}») не может работать, потому что Сохранить метод как сохранить (объект Object) –

+0

бы не метод с Объектный параметр принимает строку? (String - объект) – Reek

+0

Время компиляции без ошибок ... но время выполнения показывает ошибку –

1

Посмотрите на пример в README for the repo. Он показывает, что вы хотите POJO, но вам не нужно реализовывать Serializable. Просто создайте класс с _id и _rev свойствами, которые являются строками. Затем добавьте свойства, совместимые с объектами Javascript, по желанию.

// A Java type that can be serialized to JSON 
public class ExampleDocument { 
    private String _id = "example_id"; 
    private String _rev = null; 
    private boolean isExample; 

    public ExampleDocument(boolean isExample) { 
    this.isExample = isExample; 
    } 

    public String toString() { 
    return "{ id: " + _id + ",\nrev: " + _rev + ",\nisExample: " + isExample + "\n}"; 
    } 
} 

// Create an ExampleDocument and save it in the database 
db.save(new ExampleDocument(true)); 

Хотя я не пробовал, подход Hashmap может работать также, как описано в данном руководстве: https://www.ibm.com/blogs/bluemix/2014/07/cloudant_on_bluemix/.

// create a simple doc to place into your new database 
Map<String, Object> doc = new HashMap<String, Object>(); 
doc.put("_id", UUID.randomUUID().toString()); 
doc.put("season", "summer"); 
doc.put("climate", "arid"); 
dbc.create(doc); 

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

  • Нет связанных вопросов^_^