2013-03-03 1 views
0

В моем нижнем коде, colData магазины JSON String. Образец пример для colData-Сопоставьте строку со строкой 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," идентификатор пользователя ": 493}," сп ": 42}]," LMD ": 20130}

сейчас Я пытаюсь сопоставить id значение с userId значением в приведенном выше JSON String. Значение, если id Значение равно 493, то в приведенном выше JSON String userId значение также должно быть 493. И в JSON String, возможно, есть много userId values, поэтому все значения userId должны совпадать с id. Если какой-либо из них не совпадает, то запишите исключение.

Так что я пытался что-то вроде this-

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

* Есть что-нибудь мне не хватает * A JSON парсер, может быть? –

+0

@HotLicks, Можете ли вы представить мне пример и для достижения вышеуказанного сценария? – AKIWEB

+0

Разберите JSON на карте. На карте найдите «lv» массив карт. Перейдите через массив и найдите элемент «v», который является другой картой. Внутри этой карты найдите элемент «userId». –

ответ

2

Like Hot Lips отмеченных в комментариях. , вы должны действительно использовать процессор JSON для этого.

Вот пример с использованием Jackson JSON Processor. Я предположил, что id - отдельная строка, так как я ее не видел в JSON.

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

Спасибо, Дэниэл за помощь. Я сделал это точно так, как есть.Но я получаю ошибку в методе readTree, говоря, что 'Метод readTree (JsonParser) в типе ObjectMapper не применим для аргументов (String)'. Может быть, я импортировал неправильный файл jar, поэтому? Можете ли вы указать мне правильные файлы jar, если это так. Я загрузил банки из [здесь] (http://www.java2s.com/Code/Jar/j/Downloadjacksonjar.htm). – AKIWEB

+0

@ Nevzz03 - Я использую версию 1.9, и я использую Maven для обработки зависимостей. Если вы используете Maven, вы можете указать на это репо: http://repository.codehaus.org/org/codehaus/jackson. В противном случае вы сможете получить все банки из http://wiki.fasterxml.com/JacksonDownload#Latest_stable_1.x_version. Мой проект имеет следующие 4 бана на пути к классам: jackson-core-asl-1.9.2.jar; джексон-картостроитель-ASL-1.9.2.jar; ДЖЕКСОН-jaxrs-1.9.2.jar; ДЖЕКСОН-хс-1.9.2.jar –

0

Возможно, вам просто не хватает двойной кавычки?

"userId:"493 

попробовать это для шаблона:

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

Аналогично вам нужно \»внутри matcher.group() равно (..)

+0

По-прежнему то же самое. Я попытался использовать это: 'public static final Pattern USER_ID_PATTERN = Pattern.compile (" userId: \ "(\\ d +)"); '. Он не входит в цикл while – AKIWEB

+0

oh my bad, двойной кавычек был в неправильное положение относительно двоеточия. Вот исправленный шаблон: попробуйте еще раз. userId \ ": (\\ d +)" – javadba

+0

Этот шаблон был проверен как правильный. Если вы хотите использовать json parser, это ваш вызов. – javadba

Смежные вопросы