我正在尝试使用jcouchdb(https://code.google.com/p/jcouchdb/)从Java访问我的CouchDB实例。我有一些JSon文档,我想解析为Java类 - 使用在jcouchdb中使用的Svenson,然后将这些解析的对象放入DB中。我使用AVRO(http://avro.apache.org)JSon Encoder生成这个JSON对象,它们似乎没问题,但显然其他解析器也有问题。
我的JSon字符串看起来像这样:
{
"id":40,
"event_id":"48764322212",
"note":{
"string":"ABC note"
},
"created_date":null,
"event_category":null,
"city":null,
"address":null
}
这似乎是有效的JSON - 使用http://jsonformatter.curiousconcept.com/验证
然而,我的Svenson对象定义如下:
public class Note {
Long id;
String eventId;
String note;
String createdDate;
String eventCategory;
String city;
String address;
@JSONProperty()
public Long getId() {
@JSONProperty("event_id")
public String getEventId() {
@JSONProperty("note")
public String getNote() {
@JSONProperty("created_date")
public String getCreatedDate() {
@JSONProperty("event_category")
public String getEventCategory() {
@JSONProperty("city")
public String getCity() {
@JSONProperty("address")
public String getAddress() {
}
(故意删除了设置者和吸气者的身体)
解析时的错误是:
Cannot set property string on class java.lang.String
似乎正确解析了这个JSON( note 字段有区别):
{
"id":40,
"event_case_id":"000-123123123",
"event_msisdn":"48764322212",
"note":"Planowana data portacji: 2011/01/27 11:42:49",
"created_date":null,
"event_category":null,
"city":null,
"address":null
}
我该如何解决这个问题?也许还有另一个json库对我有用吗?
答案 0 :(得分:3)
您将注释声明为java.lang.String:
public String getNote()
但在JSON中,您将其声明为具有名为“string”的属性的对象:
"note":{
"string":"ABC note"
}
您需要更改JSON或Bean以相互匹配。例如,在第二个正在运行的JSON中,您将JSON注释声明为字符串。这就是它运作的原因。