从一个字符串到列表java的数字

时间:2014-03-24 16:54:47

标签: java json string integer contains

所以我使用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++
    }

4 个答案:

答案 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);