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也是需要的。
现在不知道怎么操作了?字符串转数组?这个好像没法转了吧。截取字符?
高分请高手帮我写出相关操作代码吧,谢谢!!

解决方案 »

  1.   

    楼主熟悉常用的各种字符串操作么?subString()、indexOf()这些应该会用吧?
    如果楼主急着用,上网搜一下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();
    }
    }
    }
      

  2.   

    谢谢!我这个不是json格式,是json格式就好了,之间response.getData()就可以了。
    这个SmartGWT中的RPCManage...
      

  3.   

    用Split函数
    再用Match
    方法自己写吧,我就提供一个思路
      

  4.   

    用Split函数
    再用Match
    方法自己写吧,我就提供一个思路
      

  5.   

    自己弄出来了,是json格式的字符串,我的意思是说和json没有丝毫关系。
    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的属性的指了。