很可能这个问题是因为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"
}
}
答案 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}}