
我觉得要是可以
String s = "callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} )".somemethod("^{.*}$"); //s = "client_id":"YOUR_APPID","openid":"YOUR_OPENID" 然后 String params = s.split(","); for(String param: params){ if(param.contains("openid")){ String keyvalue = param.split(":"); String openid = keyvalue[1] } } 就好了。。 就差这个 somemethod,我看了官方文档,好像没有合适的方法。。不知道该如何绕远路去实现
谢谢
1 LxExExl 2019 年 8 月 25 日 额 这不应该是 parse 一个接森 |
2 CFO 2019 年 8 月 25 日 via Android 把 json 转对象再操作会更爽吧 |
3 AlisaDestiny 2019 年 8 月 25 日 不如试试用冒号分割? s.split("\"")[7] |
4 Newyorkcity OP |
5 Duolingo 2019 年 8 月 25 日 via Android JSONObject.parseObject(s, HashMap.class).get("openid") |
6 Newyorkcity OP @AlisaDestiny 666 这个操作确实可以,就是语义上不太好理解,而且万一要是返回的参数的位置换了一下就玩完了。不过还是很感谢 |
7 Duolingo 2019 年 8 月 25 日 via Android JSON 外还有啊。。。那用正则匹配一下 JSON 字符串 |
8 Trim21 2019 年 8 月 25 日 via Android 先处理字符串,把前面的 callback(和最后一个)去掉再解析成 json |
9 Newyorkcity OP |
10 Duolingo 2019 年 8 月 25 日 via Android @Newyorkcity 如果确定返回值中只会有一对大括号的话,直接正则匹配大括号,然后随便转 map 还是别的方式处理就行呗 |
11 azh7138m 2019 年 8 月 25 日 这是 JSONP 格式,直接把第一个 "(" 前面的,最后一个 ")" 后面的去掉,当 JSON 解析就行了 不过话说回来,一个接口如果有 JSONP 返回,一般就会有一个参数可以控制返回 JSON |
12 mxalbert1996 2019 年 8 月 25 日 via Android Pattern.compile("^\{.*)\}$").matcher(s).group(0) |
13 mxalbert1996 2019 年 8 月 25 日 via Android @mxalbert1996 多打了一个括号 |
14 glaucus 2019 年 8 月 25 日 via iPhone 我以前做过这个,我的做法是匹配()括号取括号中的内容,然后转 json 再取字段,至于如何匹配()这是一个经典算法题,Leetcode 上也有,楼主可以搜一下 |
15 mrcn 2019 年 8 月 25 日 via Android 从前往后找第一个( 从后往前找第一个) 两个位置一减就是长度 然后 substr 取出来 |
16 lawler 2019 年 8 月 25 日 哈哈哈哈,突然想皮一下。 ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("js"); scriptEngine.eval("function callback(data){return data.openid;}"); scriptEngine.eval(s); // 这里接收你的结果 |
17 allenhu 2019 年 8 月 28 日 如果你智力正常,最先想到的不该是 找到 "openid":" 和 "} 的位置,然后通过 substring 来截取么? |