[alibaba/fastjson]无法将String转成List

2025-11-25 711 views
4
String temp="{\"data\":{\"data1\":{\"data1\":\"20141226\",\"data4\":\"201412\",\"data5\":\"0.54\",\"data2\":\"null\",\"data3\":\"6217004260004601308\",\"data8\":\"206384.11\",\"data6\":\"0\",\"data7\":\"0\"},\"data2\":{\"data1\":\"20141121\",\"data4\":\"201411\",\"data5\":\"367.71\",\"data2\":\"null\",\"data3\":\"6217004260004601308\",\"data8\":\"206751.82\",\"data6\":\"775.32\",\"data7\":\"0\"}},\"dateTime\":\"2015-10-29 14:38:43\",\"success\":true,\"msg\":\"\",\"u\":\"e62b17948e3380d5d373778776710159\"}";
        try {
            JSONObject jsonObject = new JSONObject(temp);
            JSONObject data = jsonObject.getJSONObject("data");
            List<PubLoanBean> pubLoanBeen = FastJsonUtils.json2list(data.toString(), PubLoanBean.class);
            Log.i("testBean", "pubLoanBeen: "+pubLoanBeen);
        } catch (Exception e) {
            e.printStackTrace();
        }
public class PubLoanBean {

    /**
     * data1 : 20141226
     * data4 : 201412
     * data5 : 0.54
     * data2 : null
     * data3 : 6217004260004601308
     * data8 : 206384.11
     * data6 : 0
     * data7 : 0
     */

    private String data1;
    private String data4;
    private String data5;
    private String data2;
    private String data3;
    private String data8;
    private String data6;
    private String data7;

    public String getData1() {
        return data1;
    }

    public void setData1(String data1) {
        this.data1 = data1;
    }

    public String getData4() {
        return data4;
    }

    public void setData4(String data4) {
        this.data4 = data4;
    }

    public String getData5() {
        return data5;
    }

    public void setData5(String data5) {
        this.data5 = data5;
    }

    public String getData2() {
        return data2;
    }

    public void setData2(String data2) {
        this.data2 = data2;
    }

    public String getData3() {
        return data3;
    }

    public void setData3(String data3) {
        this.data3 = data3;
    }

    public String getData8() {
        return data8;
    }

    public void setData8(String data8) {
        this.data8 = data8;
    }

    public String getData6() {
        return data6;
    }

    public void setData6(String data6) {
        this.data6 = data6;
    }

    public String getData7() {
        return data7;
    }

    public void setData7(String data7) {
        this.data7 = data7;
    }
}
public static <T> List<T> json2list(String jsonArrayStr, Class<T> clazz) {
        return JSON.parseArray(jsonArrayStr, clazz);
    }

提示转化出错:

05-12 16:38:26.424 3435-3435/com.smates.selfservice W/System.err: com.alibaba.fastjson.JSONException: exepct '[', but {, pos 1, json : {"data1":{"data1":"20141226","data4":"201412","data5":"0.54","data2":"null","data3":"6217004260004601308","data8":"206384.11","data6":"0","data7":"0"},"data2":{"data1":"20141121","data4":"201411","data5":"367.71","data2":"null","data3":"6217004260004601308","data8":"206751.82","data6":"775.32","data7":"0"}}
05-12 16:38:26.425 3435-3435/com.smates.selfservice W/System.err:     at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:712)
05-12 16:38:26.426 3435-3435/com.smates.selfservice W/System.err:     at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:702)
05-12 16:38:26.427 3435-3435/com.smates.selfservice W/System.err:     at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:697)
05-12 16:38:26.428 3435-3435/com.smates.selfservice W/System.err:     at com.alibaba.fastjson.JSON.parseArray(JSON.java:300)
05-12 16:38:26.429 3435-3435/com.smates.selfservice W/System.err:     at com.smates.selfservice.util.FastJsonUtils.json2list(FastJsonUtils.java:47)
05-12 16:38:26.430 3435-3435/com.smates.selfservice W/System.err:     at com.smates.selfservice.Portrait_MainActivity.onCreate(Portrait_MainActivity.java:159)
05-12 16:38:26.431 3435-3435/com.smates.selfservice W/System.err:     at android.app.Activity.performCreate(Activity.java:6006)
05-12 16:38:26.432 3435-3435/com.smates.selfservice W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1116)
05-12 16:38:26.433 3435-3435/com.smates.selfservice W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
05-12 16:38:26.434 3435-3435/com.smates.selfservice W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
05-12 16:38:26.435 3435-3435/com.smates.selfservice W/System.err:     at android.app.ActivityThread.access$800(ActivityThread.java:151)
05-12 16:38:26.437 3435-3435/com.smates.selfservice W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
05-12 16:38:26.437 3435-3435/com.smates.selfservice W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
05-12 16:38:26.438 3435-3435/com.smates.selfservice W/System.err:     at android.os.Looper.loop(Looper.java:135)
05-12 16:38:26.439 3435-3435/com.smates.selfservice W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5258)
05-12 16:38:26.440 3435-3435/com.smates.selfservice W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
05-12 16:38:26.441 3435-3435/com.smates.selfservice W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
05-12 16:38:26.442 3435-3435/com.smates.selfservice W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
05-12 16:38:26.443 3435-3435/com.smates.selfservice W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

请问下大神该如何解决?非常感谢!

回答

4

这个json不是List,怎么转List?

1

data.toString() 返回下面的字符串:

{
  "data2": {
    "data8": "206751.82",
    "data7": "0",
    "data6": "775.32",
    "data5": "367.71",
    "data4": "201411",
    "data3": "6217004260004601308",
    "data2": "null",
    "data1": "20141121"
  },
  "data1": {
    "data8": "206384.11",
    "data7": "0",
    "data6": "0",
    "data5": "0.54",
    "data4": "201412",
    "data3": "6217004260004601308",
    "data2": "null",
    "data1": "20141226"
  }
}

这不是一个JSON Array/List,你可以试一下下面的代码:

JSONObject jsonObject = JSON.parseObject(temp);
JSONObject data = jsonObject.getJSONObject("data");
List<PubLoanBean> pubLoanBeen = FastJsonUtils.json2list(data.values().toString(), PubLoanBean.class);

这个方式虽然可能会work,但效率很低,因为重复解析或组装JOSN两次,如果你仔细看FastJson的API 接口,或许可以找到一种更有效的方式

1

@landawn @wenshao 我的意思其实就是landawn那样的,我知道它不是完整的List,但是它的Values集合是完整的,我是想提取出Values部分组成的List,想请教下FastJson里可以做到比较高效的方法不?

3

BeanUtils.describe values