我该如何装饰JSONObject?

时间:2016-07-18 08:32:58

标签: java json decorator org.json

我想实现我在JSONObject中覆盖一个方法。所以它总是返回一个列表,即使它有一个元素:

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

public class JSONObjectDecorator extends JSONObject {

    public JSONObjectDecorator(JSONObject jsonObject) {
        super(jsonObject, JSONObject.getNames(jsonObject));
    }

    @Override
    public List<String> get(String field){
        List<String> result = new ArrayList<String>();
        if (!isNull(field)) {
            Object data = get(field);
            if (data instanceof JSONArray) {
                JSONArray array = (JSONArray) data;
                for (int i=0; i< array.length(); i++){
                    result.add(array.getString(i));
                }
            } else {
                result.add(data.toString());
            }
        }
        return result;
    }    

}

现在这段代码因为这一行而给出了StackOverflowError:

Object data = get(field);

我该如何实现这个目标?

更新:我知道为什么它是StackOverflowError,并且@Andy Turner突出显示super.get解决了构造函数问题, 但是当我在JSONObjectDecorator的一个实例上调用例如getString()时,它会抛出一个异常,即该字段不是String。 (因为它是List,可能是&#34; getString&#34;调用&#34; get&#34;)

我会检查&#34; get(String field)&#34;在JSONObject中调用,我认为解决方案也将覆盖这些方法。

0 个答案:

没有答案