簡體   English   中英

如何將 JSONObject 轉換為帶有字符串變量的 Java Bean?

[英]How to convert a JSONObject to a Java Bean with string variables?

如何將JSONObject轉換為PersonBean ,如下所示? 我有一個中介Personname字段和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM