0

以下のコードでは、colDatastores JSON String. colData のサンプル例-

{"lv":[{"v":{"tenureSiteReg":null,"bghtItms":48,"pnlValue":105.478409,"byrSgmnt":2,"cstmrId":"814296998","slrRevRnk":-99.0 ,"soldItms":0,"slrSgmnt":6,"byrRevRnk":0.013,"mainAcct":78,"gmv":0.0,"cstmrRevRnk":0.021,"pnlRev":313.438843,"cstmrSgmnt":51," gmb":4674.76,"totalVal":142.536293,"userId":493},"cn":42}],"lmd":20130}

今、上記のid値と値を一致させようとしています。値が上記の JSON 文字列の場合、値も である必要があります。また、JSON 文字列では、多くの可能性があるため、すべての値が と一致する必要があります。それらのいずれかが一致しない場合は、例外をログに記録します。userIdJSON Stringid493userId493userId valuesuserIdid

だから私はこのようなことを試みていました-

private static final Pattern USER_ID_PATTERN = Pattern.compile("userId:\\d+");

for (String str : colData) {
    Matcher matcher = USER_ID_PATTERN.matcher(str);

        while (matcher.find()) {
            if (!matcher.group().equals("userId:"+id))
                 System.out.println("LOG exception");

            }
}

しかし、上記の JSON 文字列の場合、内部にwhile loopも入りません。不足しているものはありますか?

4

2 に答える 2

2

コメントに記載されている Hot Lips のように、実際には JSON プロセッサを使用する必要があります。

Jackson JSON Processorを使用した初歩的な例を次に示します。idJSONに表示されなかったので、別の文字列であると想定しました。

import java.io.IOException;
import java.util.List;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.ObjectMapper;

class Test {
    public static void main(String[] args) {
        String json = "{\"lv\":[{\"v\":{\"tenureSiteReg\":null,\"bghtItms\":48," +
                "\"pnlValue\":105.478409,\"byrSgmnt\":2,\"cstmrId\":\"814296998\",\"slrRevRnk\":-99.0," +
                "\"soldItms\":0,\"slrSgmnt\":6,\"byrRevRnk\":0.013,\"mainAcct\":78,\"gmv\":0.0," +
                "\"cstmrRevRnk\":0.021,\"pnlRev\":313.438843,\"cstmrSgmnt\":51,\"gmb\":4674.76," +
                "\"totalVal\":142.536293,\"userId\":493},\"cn\":42}],\"lmd\":20130}";
        String id = "493";

        ObjectMapper mapper = new ObjectMapper();

        try {
            JsonNode rootNode = mapper.readTree(json);
            List<JsonNode> userIds = rootNode.findValues("userId");         
            for (JsonNode node : userIds)
            {
                if (!id.equals(node.toString())) {
                    System.out.println("Log exception: id "+id+" != userId "+node);
                    break;
                } else {
                    System.out.println("Congratulations! id "+id+" = userId "+node);
                }               
            }
        } catch (JsonProcessingException e) {
            System.out.println("JsonProcessingException: ");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("IOException: ");
            e.printStackTrace();
        }
    }
}

このクラスを実行すると、以下が生成されます。

Congratulations! id 493 = userId 493
于 2013-03-03T06:53:57.377 に答える
0

二重引用符が抜けているだけではないでしょうか?

"userId:"493

パターンのためにこれを試してください:

"userId\":(\\d+)"

同様に、 matcher.group().equals(..) 内に \" が必要です

于 2013-03-03T01:40:16.897 に答える