【问题标题】:jcouchdb: svenson unable to parse json stringjcouchdb:svenson 无法解析 json 字符串
【发布时间】:2011-03-21 08:19:08
【问题描述】:

我正在尝试使用 jcouchdb (https://code.google.com/p/jcouchdb/) 从 Java 访问我的 CouchDB 实例。我有一些我想解析成 Java 类的 JSon 文档 - 使用 Svenson,在 jcouchdb 中使用,然后将这些解析的对象放入 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() {

}

(故意移除 setter 和 getter 的主体)

解析时的错误是:

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 库?

【问题讨论】:

    标签: java couchdb json svenson


    【解决方案1】:

    您将 note 声明为 java.lang.String:

    public String getNote()
    

    但在 JSON 中,您将其声明为具有 named "string" 属性的 Object:

    "note":{
      "string":"ABC note"
    }
    

    您需要更改 JSON 或 Bean 以相互匹配。例如,在第二个正常运行的 JSON 中,您将 JSON 注释声明为字符串。这就是它起作用的原因。

    【讨论】:

    • 好的,这看起来很明显 + 错误消息。你能建议我应该如何定义我的 bean 以便上面的 JSON 字符串可以工作吗?我无法修改 Avro 生成的 json。
    • 我现在无法测试它,但我认为您应该使用type selection 将具有“字符串”属性的对象映射到字符串。
    • 好吧,添加一个简单的: parser.addTypeHint(".string", String.class) 没有帮助 - 我应该使用不同的匹配语法吗?
    猜你喜欢
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2016-09-08
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2015-12-03
    相关资源
    最近更新 更多