如何检查json的密钥以及是否存在,然后在java model Object中设置该值

时间:2014-10-17 14:03:54

标签: java json

我有一个使用默认值初始化的模型对象。要刷新对象的内容,我调用Web服务并获取响应并从json对象获取内容。 我想检查如果json响应包含对象。如果是,则调用setter并设置数据,如果没有,则离开然后不设置。我的对象中有大约300个字段。我如何用更少的代码来做到这一点。我列出了我目前的方法。

  1. 我的模型对象就像

    public class MyObject {
    
        private String str1 = "Initial Value1";
        private String str2 = "Initial Value2";
    
        public void setStr1(String str1)
        {
            this.str1 = str1;
        }
    
        public void setStr2(String str2)
        {
            this.str2 = str2;
        }
    
        public String getStr1(){
            return str1;
        }
    
    
        public String getStr2(){
            return str2;
        }
    }  
    
  2. 我的json回复就像

           {
         "val_one":"New Value1",
         "val_two":"New_value2"
          }
    

    现在在运行时我需要设置json response

    的值
           MyObject myObject = new MyObject();
    
           if(jsonObject.has("val_one"));
           myObject.setStr1(jsonObject.get("val_one"));
           if(jsonObject.has("val_two"));
           myObject.setStr2(jsonObject.get("val_two"));
    

    现在如何以更好,更有效的方式做到这一点

3 个答案:

答案 0 :(得分:2)

如果双方都在使用JAVA那么为什么不使用json-io。您可以正常创建对象。即

Animal a = new Aminmal() andimal.setName("bob");

然后使用json-io将它变成json - stream到它需要的地方...使用json io改回对象

这可以使用

完成
JsonWriter.objectToJson(Object o);
JsonReader.jsonToJava(String json);

https://code.google.com/p/json-io/

json-io也比我用过的大多数其他第三方json图书馆都重量轻且速度快。

如果您想要对输出进行更多控制,即日期转换等,那就说了。然后看看GSON。

https://code.google.com/p/google-gson/

答案 1 :(得分:1)

除了其他建议之外,另一个选择是gson。这是gson信息的链接。

基本上gson的想法是你定义一个对象来表示你正在接收的JSON结构。有点像现在的情况,你只需要更改对象属性以匹配JSON字段的名称,即'val_one'和'val_two'。

然后你只需要使用gson从JSON文本创建对象,例如:

Gson gson = new GsonBuilder().create();
MyObject json = gson.fromJson(jsonStr, MyObject.class);

答案 2 :(得分:0)

为什么要自己拍摄对象模型?如果你拿春天,那么你可以使用杰克逊映射器,并为你完成所有这些。 如果您不想使用spring,那么您仍然可以使用jackson2并让它处理解析: http://wiki.fasterxml.com/JacksonRelease20