【问题标题】:Parse realm model using jackson使用杰克逊解析领域模型
【发布时间】:2018-04-20 23:48:53
【问题描述】:

使用jackson库将领域模型转换为json对象时获取未知密钥。

这是我的领域模型实例。

    public class RecordData extends RealmObject {

    public RecordData() {

    }

    private FormData formData;

    @Nullable
    @JsonProperty("values")
    private RealmList<Values> values;

    @Nullable
    @JsonProperty("value")
    private String value;
}

将领域模型转换为 json 对象的代码。

JSONObject recordDataJsonObject = new JSONObject(new ObjectMapper().writeValueAsString(formData.getRecordData()));

解析 json 的输出:

{"loaded":true,"managed":false,"valid":true,"value":"fdfdf","values":[]}

领域版本:io.realm:realm-gradle-plugin:4.1.1

Rxjava 版本:'io.reactivex.rxjava2:rxjava:2.1.6'

杰克逊版:com.fasterxml.jackson.core:jackson-databind:2.8.6

为什么我得到加载、托管和有效的布尔值?

【问题讨论】:

  • 可以发getRecordData()的代码吗?
  • getRecordData() 方法只返回 RecordData 领域模型实例
  • 你不做任何Realm.where().findAll() 查询吗?我需要查看该代码以验证您是否遇到了我解决的类似问题。
  • 这没有任何意义,这些布尔值是领域对象的内部字段。但它不应该出现在 json 中。

标签: android json jackson realm


【解决方案1】:

从 ObjectMapper 写响应,你必须这样做:

public static String getJsonFromObject() {
        ObjectMapper objectMapper = ObjectMapperHelper.getObjectMapperInstance();
        String jsonString = null;
           try {
            jsonString = objectMapper.writeValueAsString(formData.getRecordData());
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return jsonString != null ? jsonString : "";
    }

并在 JsonObject 中得到您的回复:

try {
    JSONObject jsonObject = new JSONObject().getJSONObject(getJsonFromObject());
     } catch (JSONException e) {
       e.printStackTrace();
       }

编码愉快!!

【讨论】:

  • 我使用了上面相同的方法,但问题存在。
【解决方案2】:

我已经使用 Gson 解析库解决了。

JSONObject recordDataJsonObject = new JSONObject(new Gson().toJson(formData.getRecordData()));

它不返回未知密钥。输出在这里。

{"value":"fdfdf","values":[]}

如果您面临同样的情况,希望您能找到此解决方案。

【讨论】:

    【解决方案3】:

    你可以使用@JsonIgnoreProperties注解:

    @JsonIgnoreProperties({"loaded", "managed", "valid"})
    public class RecordData extends RealmObject {
    
        public RecordData() {
    
        }
    
        private FormData formData;
    
        @Nullable
        @JsonProperty("values")
        private RealmList<Values> values;
    
        @Nullable
        @JsonProperty("value")
        private String value;
    }
    

    另一种选择是使用@RealmClass public class RecordData implements RealmModel

    【讨论】:

    • 使用 JsonIgnoreProperties 将是击球手选项。但是@RealmClass 注解已经添加到我的类中了。
    • 重点是implements RealmModel而不是extends RealmObject,但我认为忽略属性更容易
    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2019-11-25
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2018-08-25
    相关资源
    最近更新 更多