如何快速上传java中的json字段?

时间:2015-06-11 05:11:40

标签: java json

我在Java中有以下字符串对象(它的json)(它很漂亮,所以它很清晰):

{
   name: John,
   age: {
     years:18
   },
   computer_skills: {
     years:4
   },
   mile_runner: {
     years:2
   }
}

我有一个阵列,有100个人具有相同的结构。

通过所有100人并使其不再有“年”的最佳方式是什么?换句话说,100中的每个对象看起来都像:

{
   name: John,
   age:18,
   computer_skills:4,
   mile_runner:2
}

在python中,我可以在伪代码中做一些像这样的微不足道的事情:

// Iterates through each person
    for person in persons:
// Iterates through each key/value pair k,v
        for k, v in person.items():
            // check if the value is an object {}
            if isinstance(v, dict) and 'years' in v:
                if the value is an object, and there is 'years' as a key nested within, then set the key k to have the value of the nested 'years' field
                person[k] = v['years']

最后,我希望能够将“人物”对象写回(json)的字符串形式。

在java中有一种简单而有效的方法吗?如果可能的话,我宁愿不创建一个代表我对象中每个字段的模型对象,因为我喜欢在python中不必这样做(除非我必须因为它的Java)。

我喜欢你如何迭代,检查一个对象是否有嵌套字段'years',如果有,那么就升级它!它看起来很简单。

2 个答案:

答案 0 :(得分:0)

Java使用面向对象编程(OOP),这个范例的重点是使用对象

你能做的最好的事情是:

class Person {
    private String name;
    private Integer age;
    private Integer computerSkills;
    private Integer mileRunner;

    /** getters and setters **/

    @Override
    public String toString(){
        return "{name: "+name+", age:"+age+", 
               computer_skills:"+computerSkills+", mile_runner:"+mileRunner+"}";
    }

然后,您只需调用toString()方法即可填满对象并获取数据。

答案 1 :(得分:0)

您可以使用JSON解析器包来获取可用的对象,例如quick-jsonorg.json as shown here。您可能需要更新下面的代码来处理您获得的特定对象,但仍然适用相同的一般模式。上面的链接包含如何使用这些库的示例。

假设您使用的是Map<String,Object>或类似内容,并且age也是Map<String,Object>,您的答案将如下所示:

class MyClass {

    // This changes depending on your entry point, e.g. it's different on Tomcat/JBoss
    public static void main(String[] args) {
        // get array of maps using JSON parser ...

        for(Map<String,Object> map:myMapArray) {
            // change value
            map.put('age', ((Map<String,Object>) map.get('age')).get('years'));
        }

        // do other stuff...
    }
}

这不一定是最佳做法,因此您可能想要使用DTO课程。