当前位置:编程学习 > JAVA >>

急~~~~关于json的问题

我用cxf+spring做了一个rest服务,通过json和.net交换数据,结果程序生成的json数据是
{"device":[{"deviceFactory":"海康","deviceNum":100001,"deviceState":1,"deviceType":1,"x":12321.0091,"y":123213.992},{"deviceFactory":"大华","deviceNum":100002,"deviceState":1,"deviceType":1,"x":12000.929,"y":12321.88701}]}这种格式程序不能解析

能解析的格式应该是
[{"deviceFactory":"海康","deviceNum":100001,"deviceState":1,"deviceType":1,"x":12321.0091,"y":123213.992},{"deviceFactory":"大华","deviceNum":100002,"deviceState":1,"deviceType":1,"x":12000.929,"y":12321.88701}]
我刚用json不熟,请问下这个问题怎么解决 --------------------编程问答-------------------- 其实就是多了一层对象:"device" 而已,要么就直接对字符串操作,把最外层节点给去掉:
{"device":[{"deviceFactory":"海康","deviceNum":100001,"deviceState":1,"deviceType":1,"x":12321.0091,"y":123213.992},{"deviceFactory":"大华","deviceNum":100002,"deviceState":1,"deviceType":1,"x":12000.929,"y":12321.88701}]}

要么就是生成节点的时候,直接生成下一级的。 --------------------编程问答-------------------- {"device":[{"deviceFactory":"海康","deviceNum":100001,"deviceState":1,"deviceType":1,"x":12321.0091,"y":123213.992},{"deviceFactory":"大华","deviceNum":100002,"deviceState":1,"deviceType":1,"x":12000.929,"y":12321.88701}]}

这种格式是能解析.用JSonArray. --------------------编程问答--------------------
引用 2 楼  的回复:
{"device":[{"deviceFactory":"海康","deviceNum":100001,"deviceState":1,"deviceType":1,"x":12321.0091,"y":123213.992},{"deviceFactory":"大华","deviceNum":100002,"deviceState":1,"deviceType":1,"x":12000.929,……


解析代码:
public static List getDTOList(String jsonString, Class clazz) {
setDataFormat2JAVA();
JSONArray array = JSONArray.fromObject(jsonString);
List list = new ArrayList();
for (Iterator iter = array.iterator(); iter.hasNext();) {
JSONObject jsonObject = (JSONObject) iter.next();
list.add(JSONObject.toBean(jsonObject, clazz));
}
return list;
}
解析异常:
Exception in thread "main" net.sf.json.JSONException: A JSONArray text must start with '[' at character 1 of {"device":[{"deviceFactory":"海康","deviceNum":100001,"deviceState":1,"deviceType":1,"x":12321.0091,"y":123213.992},{"deviceFactory":"大华","deviceNum":100002,"deviceState":1,"deviceType":1,"x":12000.929,"y":12321.88701}]}
at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:499)
at net.sf.json.JSONArray._fromJSONTokener(JSONArray.java:1116)
at net.sf.json.JSONArray._fromString(JSONArray.java:1197)
at net.sf.json.JSONArray.fromObject(JSONArray.java:127)
at net.sf.json.JSONArray.fromObject(JSONArray.java:105)
at com.i易做图ong.plateform.sys.util.JsonUtil.getDTOList(JsonUtil.java:29)
at com.i易做图ong.plateform.sys.util.JsonUtil.main(JsonUtil.java:48)
--------------------编程问答-------------------- --------------------编程问答-------------------- try {
JSONObject object = new JSONObject(jsonString);
JSONArray results = object.getJSONArray("device");
for(int i =0;i<results.length(); i++){
JSONObject jsonObject = results.getJSONObject(i);
String ss= jsonObject.getString("deviceFactory");
System.out.println(ss);
}
} catch (JSONException e) {
e.printStackTrace();
} --------------------编程问答-------------------- 可以解析啊,只是需要先取出device的值再做array解析

而另一种是直接一个array --------------------编程问答-------------------- package cn.com.json;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class TestJson {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
String js="{\"device\":[{\"deviceFactory\":\"海康\",\"deviceNum\":100001,\"deviceState\":1,\"deviceType\":1,\"x\":12321.0091,\"y\":123213.992},{\"deviceFactory\":\"大华\",\"deviceNum\":100002,\"deviceState\":1,\"deviceType\":1,\"x\":12000.929,\"y\":12321.88701}]}";
JSONObject dev=JSONObject.fromObject(js);
JSONArray array=JSONArray.fromObject(dev.get("device"));
for (int i = 0; i < array.size(); i++) {
JSONObject obj=JSONObject.fromObject(array.get(i));
System.out.println(obj.get("deviceFactory"));
}

}

}
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,