所以我使用http post方法从API请求一些数据,然后我收到一个JSON响应然后我有一个看起来像JSON响应的字符串,如下所示:
{"status": "OK", "results": [{"score": 0.0, "id": "2"}, {"score": 1.0, "id": "3"}, {"score": 0.0, "id": "0"}, {"score": 0.0, "id": "1"}, {"score": 0.0, "id": "6"}, {"score": 0.23606, "id": "7"}, {"score": 0.0, "id": "4"}, {"score": -0.2295, "id": "5"}, {"score": 0.41086, "id": "8"}, {"score": 0.39129, "id": "9"}]}
我想从这个列表中提取数字或更好地检查有多少数字在0.2-1.0之间,如果这个条件为真,则增加一个整数值。
例如我想做这样的事情,但我找不到适合我的语法。
if(responseString.contains("0.0-0.2")
{
OccurencesNeutral++
}
if(responseString.contains("0.2-1.0")
{
OccurencesPositive++
}
答案 0 :(得分:2)
在处理JSON时,您应该使用JSONObject API。在你的情况下,这样的事情应该有效:
try {
JSONObject json = new JSONObject(theStringYouGot);
JSONArray results = json.getJSONArray("results");
for (int i = 0; i < results.length(); i++) {
JSONObject data = results.getJSONObject(i);
double score = data.getDouble("score");
}
} catch (JSONException x) {
// Handle exception...
}
在您的代码中,您可能应该使用常量替换硬编码的字段名称以获得干净的代码。
答案 1 :(得分:0)
如果您正在使用Json libraray,那么将有来自字符串序列化和创建Object的方法,因此您可以使用正确的get方法搜索新对象中的数字。
例如在org.json中你可以做到
JSONObject jsonObj = new JSONObject("your string");
答案 2 :(得分:0)
groovy中的代码(将0.2更改为args)
def JsonSlurper js = new JsonSlurper()
def o = js.parseText(jsonStr)
def (neu, pos) = [0, 0]
o.results.each {
if (it.score <= 0.2) neu ++
else pos ++
}
println "$neu $pos"
答案 3 :(得分:0)
如果你想要正则表达式试试这个,
int OccurencesNeutral=0;
int OccurencesPositive=0;
String regex="((-?\\d+)\\.(\\d+))";
String str="{\"status\": \"OK\", \"results\": [{\"score\": 0.0, \"id\": \"2\"}, {\"score\": 1.0, \"id\": \"3\"}, {\"score\": 0.0, \"id\": \"0\"}, {\"score\": 0.0, \"id\": \"1\"}, {\"score\": 0.0, \"id\": \"6\"}, {\"score\": 0.23606, \"id\": \"7\"}, {\"score\": 0.0, \"id\": \"4\"}, {\"score\": -0.2295, \"id\": \"5\"}, {\"score\": 0.41086, \"id\": \"8\"}, {\"score\": 0.39129, \"id\": \"9\"}]}";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
float f=0;
while(m.find()){
f=Float.parseFloat(m.group());
if(f>0 && f<0.2)
OccurencesNeutral++;
if(f>0.2 && f<1.0)
OccurencesPositive++;
}
System.out.println("Neutral="+OccurencesNeutral+"\t"+"Positives="+OccurencesPositive);