Cloudant Library在保存文档

时间:2016-12-10 20:00:54

标签: java json cloudant

很可能这个问题是因为JSONObject(org.json.JSONObject)与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"
  }
}

3 个答案:

答案 0 :(得分:1)

我不熟悉cloudant,但我的猜测是JsonObject有一个名为“map”的属性,它保存你的json字符串数据(可能还有myArray属性),cloudant将它序列化为json,从而添加了不必要的值。

我的建议:

1)尝试直接保存你的json字符串,如db.save(“{hello:data}”),以避免序列化

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(new MyClass(“data”));

或者你可以使用hashmap而不是pojo:

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

答案 1 :(得分:1)

查看README for the repo中的示例。它表明您想要一个POJO,但您不必实现int hex[16] = {0b0000, 0b0001, 0b0010, 0b0011, 0b0100, 0b0101, 0b0110, 0b0111, 0b1000, 0b1001, 0b1010, 0b1011, 0b1100, 0b1101, 0b1110, 0b1111}; int hex[16] = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}; 。只需创建一个具有Serializable_id属性的类,即Strings。然后根据需要添加Javascript对象兼容属性。

_rev

虽然我没有尝试过,但Hashmap方法也可以使用,如本教程中所述:https://www.ibm.com/blogs/bluemix/2014/07/cloudant_on_bluemix/

// 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));

答案 2 :(得分:0)

有问题似乎使用了org.json.JSONObject它与cloudant客户端库不兼容。我尝试使用谷歌对象它对我有用。

使用google com.google.gson.JsonObject而不是org.json.JSONObject解决了问题。

下面给出了正确的完整代码,

{{1}}