我在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',如果有,那么就升级它!它看起来很简单。
答案 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-json或org.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课程。