2014-03-24 3 views
0

그래서 http POST 메서드를 사용하여 API에서 일부 데이터를 요청한 다음 JSON 응답을받은 다음 JSON 응답과 비슷한 문자열을 표시합니다.문자열에서 목록으로의 숫자 java

{"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++ 
    } 

답변

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... 
} 

, 당신은 아마 깨끗한 코드에 대한 상수 하드 코딩 된 필드 이름을 교체해야합니다.

+0

안녕하세요, 이것은 정확히 내가 뭘 찾고있는 것 같아요하지만 줄 오류가 있어요. JSONObject data = results1.get (i); 나는 JSON에 대해 매우 익숙하다. 그래서 왜 내가 응답 객체를 바로 문자열로 바꿨 는가? – user3456401

+0

나는 내 대답을 업데이트했다. 이제는 작동합니까? 난 그냥 내 마음에서 쓴, 그래서 그것은 구문 오류가 길잃은 오류가 있었을 수도 ... – BadIdeaException

+0

지금은 라인 results1.get (i)와 함께 작동하지만 그것은 data.get ("점수") 이중으로 선언 되는가? – user3456401

0

Json 라이브러리를 사용하는 경우 올바른 get 메소드로 새 객체의 번호를 검색 할 수 있도록 문자열에서 객체를 직렬화하고 생성하는 메소드가 있습니다. 당신이 그루비에

JSONObject jsonObj = new JSONObject("your string"); 
0

코드를 할 수있는 org.json 예를 들어

, 당신은 정규식이 시도 싶다면

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" 
0

을 (인수 0.2 변경) 할 수 있습니다

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); 
+0

안녕하세요 RKC 귀하의 회신을 보내 주셔서 감사합니다, 이것은 점수가 인스턴스에 대한 말을하는 경우 --0.23553 그것은 여전히 ​​occurrencesPositive에 추가됩니다, 음수에 대한이 정규식 작동합니까? if (f <0.0) {occurrencesNeg ++}하지만 아무 소용이 – user3456401

+0

내 정규식을 수정했습니다. 이제 음수에도 사용할 수 있습니다. – RKC

+0

브릴 리언 스! 작품은 완벽하게 대단히 감사합니다. 단지 문자열을 검색하는 데 필요한 내 이해를 돕기 위해 숫자의 패턴을 찾습니다 (이제는 빼기가 가능합니다). 다른 자리가 맞습니까? 이것이 발견되면 matcher를 사용하여 우리가 원하는 유형, 즉 pos, neg 또는 neu를 할당합니다. – user3456401