String value = "{"response":{"status":0,"startRow":0,"endRow":2,"totalRows":2,"data":[{"id":2,"audit_site_id":1,"name":"oracle3","service_type":17,"ip":"222.16.11.3","port":0,"ip_connect_db":"","login_req":"","user_field":"","session_field":""},{"id":3,"audit_site_id":1,"name":"oracle2","service_type":17,"ip":"222.16.11.2","port":0,"ip_connect_db":"","login_req":"","user_field":"","session_field":""}]}}"在 {"response":{"status":0,"startRow":0,"endRow":2,"totalRows":2,"data":[{"id":2,"audit_site_id":1,"name":"oracle3","service_type":17,"ip":"222.16.11.3","port":0,"ip_connect_db":"","login_req":"","user_field":"","session_field":""},{"id":3,"audit_site_id":1,"name":"oracle2","service_type":17,"ip":"222.16.11.2","port":0,"ip_connect_db":"","login_req":"","user_field":"","session_field":""}]}
这一段字符串中,我要得到“data"中的"name"的值,比如这个字符串中"name":"oracle3", "name":"oracle2".
我现在需要显示的就是oracle3, oracle2.当然id也是需要的。
现在不知道怎么操作了?字符串转数组?这个好像没法转了吧。截取字符?
高分请高手帮我写出相关操作代码吧,谢谢!!
这一段字符串中,我要得到“data"中的"name"的值,比如这个字符串中"name":"oracle3", "name":"oracle2".
我现在需要显示的就是oracle3, oracle2.当然id也是需要的。
现在不知道怎么操作了?字符串转数组?这个好像没法转了吧。截取字符?
高分请高手帮我写出相关操作代码吧,谢谢!!
如果楼主急着用,上网搜一下java操作json的jar包。
不急的话,强烈建议自己研究。String的常用处理即可解决这个问题,不难的。
下面这段示例代码仅能解决一层json的情况,想解决嵌套情况需要作一些修改。
import java.util.HashMap;
/**
* 公共服务组件:json格式读取服务
* @author dinghun8leech
* @date 090309
* @version 1.2i
*/
public class JsonReader {
/**
* 私有化默认构造函数
*/
private JsonReader() {
}
/**
* 解析json格式的字符串为键值集合
* @param jsonString 需解析的json格式的字符串
* @return HashMap<String,String>
* @throws CommonException 当解析失败或jsonString为不合法格式时抛出此异常
*/
public static HashMap<String,String> parse(String jsonString) throws CommonException {
if (jsonString != null) {
jsonString = jsonString.substring(jsonString.indexOf("{")+1, jsonString.length());
StringBuffer jstring = new StringBuffer(jsonString);
HashMap<String,String> hm = new HashMap<String,String>();
try {
while (jstring.indexOf(":") != -1) {
if (jstring.indexOf(",") != -1) {
if (jstring.indexOf(",")<jstring.indexOf(":")) {
break;
}
hm.put(jstring.substring(0, jstring.indexOf(":")),jstring.substring(jstring.indexOf(":")+1, jstring.indexOf(",")));
jstring.delete(0,jstring.indexOf(",")+1);
} else if(jstring.indexOf("}") != -1){
if (jstring.indexOf("}")<jstring.indexOf(":")) {
break;
}
hm.put(jstring.substring(0, jstring.indexOf(":")),jstring.substring(jstring.indexOf(":")+1, jstring.indexOf("}")));
jstring.delete(0,jstring.indexOf("}")+1);
} else {
break;
}
}
} catch (RuntimeException e) {
Print.ln("jsonString格式非法,解释失败。");
Print.er(e);
throw new CommonException();
}
return hm;
} else {
throw new ArgumentListException();
}
}
}
这个SmartGWT中的RPCManage...
再用Match
方法自己写吧,我就提供一个思路
再用Match
方法自己写吧,我就提供一个思路
public String[] parse(String responseString) {
if (responseString != null) {
if(responseString.indexOf("\"data\":") != -1) {
responseString = responseString.substring(responseString.indexOf("\"data\":")+7, responseString.length()-2);
//StringBuffer sb = new StringBuffer(responseString);
String[] ss = responseString.split("},");
//SC.say(String.valueOf(ss.length));
if(ss.length > 0 ) {
return ss;
}
}
}public void execute(RPCResponse response, Object rawData, RPCRequest request) {
String[] ss = parse(response.getAttributeAsString("data"));
if(ss != null) {
for(int i=0; i<ss.length; i++) {
String id = ss[i].substring(ss[i].indexOf("\"id\"")+5, ss[i].indexOf("\"audit_site_id\"")-1);
String name = ss[i].substring(ss[i].indexOf("\"name\"")+8, ss[i].indexOf("\"service_type\"")-2);
SC.logWarn(", id ............. : " + id + ", name ............. : " + name);
AuditPolicyTreeNode oracleNode = new AuditPolicyTreeNode(id, name);
auditPolicyTreeGrid.getData().add(oracleNode, OracleNode);
}
}上面代码有点乱,直接在项目中复制过来的,我的思路是按[]截取成子String,在按},分成String数组,这样可以取到里面的id,name的属性的指了。