Android:将 json 值映射到 pojo

Posted

技术标签:

【中文标题】Android:将 json 值映射到 pojo【英文标题】:Android:Mapping json values to pojo 【发布时间】:2017-03-31 18:34:18 【问题描述】:

我正在尝试使用 GSONJSON 值映射到 POJO。当我尝试从 JSON 字符串中取回对象时,所有变量都设置为 null。 这是我的代码

Pojo.java

public class PatientSymptoms 

    private Integer AnalSymptomsMapId;
    private Integer SymptomId;
    private String Symptom;
    private Boolean IsRemoved;
    private Boolean IsSynced;
    private Boolean IsSentToPatient;

    //Getters and Setters

映射代码

JSONObject jsonObject = (JSONObject) jsonArray.get(i);
PatientSymptoms symptoms = new PatientSymptoms();

Gson gson = new Gson();
String x =  gson.toJson(jsonObject);
symptoms = gson.fromJson(x,PatientSymptoms.class);

PatientSymptoms 对象值始终为空。这是调试器的屏幕截图

更新 JSON响应


  "Success": true,
  "StatusCode": 0,
  "StatusMessage": "",
  "Data": [
    
      "AnalSymptomsMapId": 250,
      "SymptomId": 95,
      "Symptom": "asdf",
      "IsRemoved": false,
      "IsSynced": false,
      "IsSentToPatient": true
    
  ]

【问题讨论】:

实现 Parcelable。 请发布您的 json 回复已更新 【参考方案1】:

你能给我们举个 Json 的例子吗? (像一个字符串)

(JSONObject) jsonArray.get(i).toString()

无论如何,我建议您使用 Gson 的 @SerializedName 注释来进行映射:

https://google.github.io/gson/apidocs/com/google/gson/annotations/SerializedName.html

【讨论】:

是的,就是这个 String x = gson.toJson(jsonObject);替换为 String x = jsonObject.toString();它奏效了。谢谢..【参考方案2】:

让你的 Pojo.java 为

    public class PatientSymptoms 

    private int AnalSymptomsMapId;
    private int SymptomId;
    private String Symptom;
    private boolean IsRemoved;
    private boolean IsSynced;
    private boolean IsSentToPatient;

    //Getters and Setters

因此,默认值将是原始类型的值。

【讨论】:

【参考方案3】:

我推荐你试试Ion library by Koush

型号

public class PatientSymptoms 

       private int AnalSymptomsMapId;
       private int SymptomId;
       private String Symptom;
       private boolean IsRemoved;
       private boolean IsSynced;
       private boolean IsSentToPatient;

    //Getters and Setters

用法

Ion.with(context)
   .load("http://example.com/api/patient")
   .as(new TypeToken<List<PatientSymptoms>>())
   .setCallback(new FutureCallback<List<PatientSymptoms>>() 
       @Override
       public void onCompleted(Exception e, List<PatientSymptoms> symptoms) 
            // Use the list of Patient Symtoms
    
);

注意:您唯一需要记住的是 JSON 键应与 POJO 或 MODEL 中的变量名称匹配。

【讨论】:

【参考方案4】:

我建议使用 this 制作您的模型

    选择来源类型:JSON。 注解风格:Gson. 单击预览。

那么你已经为你的JSON 生成了一个模型类。

别忘了实现Parcelable

【讨论】:

这么简短的回答,请评论!! 不幸的是,我必须有 50 声望才能评论@AndiGeeky 哦,你可以从那个链接复制一些内容,然后让答案更具描述性! 你需要通过提问来赢得声誉。 @Malik Abu Qaoud:随时!!

以上是关于Android:将 json 值映射到 pojo的主要内容,如果未能解决你的问题,请参考以下文章

将某个 JSON 值映射到枚举值 C#

将 MySQL JSON 列映射到休眠值类型

如何使用jq将json项目值映射到兄弟数组

带有 rest-plugin 的 Struts2:将 JSON 值映射到 ENUM

将 JSON 键值映射到 RestKit 0.20.1 中的核心数据属性

如何使用 Jackson 将 JSON 键值数组动态映射到子对象?