[英]How to convert a JSONObject to a Java Bean with string variables?
如何將JSONObject
轉換為PersonBean
,如下所示? 我有一個中介Person
與name
字段和List<String
的其他屬性。 該List
的大小不確定,但少於十個項目。
我的想法是創建具有附加String
字段的PersonBean
,然后手動將值從List
復制到 bean setter 中。
但是,當然,我在創建PersonBean
時遇到了PersonBean
錯誤,因為List
可能是空的:
package groupBaseX.io;
import java.util.logging.Logger;
public class PersonBeanBuilder {
private static final Logger log = Logger.getLogger(PersonBeanBuilder.class.getName());
private Person person = null;
private PersonBean personBean = new PersonBean();
private PersonBeanBuilder() {
}
public PersonBeanBuilder(Person person) {
this.person = person;
log.fine(person.toString());
log.fine(person.getName());
personBean.setName(person.getName());
String a = person.getAttributes().get(0);
String b = person.getAttributes().get(1);
String c = person.getAttributes().get(2);
String d = person.getAttributes().get(3);
String e = person.getAttributes().get(4);
personBean.setA(a);
personBean.setB(b);
personBean.setC(c);
personBean.setD(d);
personBean.setE(e);
}
public PersonBean getPersonBean() {
return personBean;
}
}
當然,我可以只使用try/catch
但沒有更優雅的解決方案嗎? 上面的代碼非常混亂。
因為JSONArray
的底層JSON
大小不確定。 出於實際目的,我只對下面每個對象的名稱和前幾個屬性感興趣:
[
{
"0":"z10",
"1":"y9",
"2":"x7",
"3":"atrib6",
"name":"alice"
},
{
"0":"home5",
"1":"cell4",
"name":"sue"
},
{
"0":"phone3",
"1":"phone2",
"2":"phone1",
"name":"joe"
},
{
"name":"people"
}
]
一些JSONObject
當然會有零個屬性,但肯定少於十個。 只是想從上面的JSON
創建一個 Java Bean,它來自BaseX
。
這是我確定的有點合理的方法:
package groupBaseX.io;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
public class PersonBeanBuilder {
private static final Logger log = Logger.getLogger(PersonBeanBuilder.class.getName());
private Person person = null;
private PersonBean personBean = new PersonBean();
private PersonBeanBuilder() {
}
public PersonBeanBuilder(Person person) {
this.person = person;
}
public PersonBean getPersonBean() {
personBean.setName(person.getName());
Map<String, AF> map = new HashMap<>();
AF attributeField = AF.GARBAGE;
person.getAttributes().forEach((s) -> {
map.put(s, attributeField.getType(s));
});
for (String key : map.keySet()) {
switch (map.get(key)) {
case HOME_PHONE:
log.fine(AF.HOME_PHONE.toString());
personBean.setHomePhone1(key);
break;
default:
log.fine(AF.HOME_PHONE.toString());
break;
}
}
return personBean;
}
}
枚舉:
package groupBaseX.io;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
public class AttributeParser {
private static final Logger log = Logger.getLogger(AttributeParser.class.getName());
private List<String> attributes = new ArrayList<>();
private AttributeParser() {
}
public AttributeParser(List<String> attributes) {
this.attributes = attributes;
}
// ^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$ phone
// ^\d{5}(?:[-\s]\d{4})?$ zip
public void foo() {
boolean isPhone = false;
boolean isZip = false;
for (String s : attributes) {
int x = 3;
isPhone = false;
isZip = false;
}
}
}
不過,還是挺別扭的。 起點是JSON
所以我相信這已經被比我更聰明的猴子想到了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.