Получить поле из JSON с помощью регулярных выражений - PullRequest
0 голосов
/ 23 мая 2018

У меня есть следующий документ json:

{  
   "videoUrl":"",
   "available":"true",
   "movie":{  
      "videoUrl":"http..."
   },
   "account":{  
      "videoUrl":"http...",
      "login":"",
      "password":""
   }
}   

В этом json у меня есть свойство с именем videoUrl, я хочу получить первое непустое videoUrl

Мое регулярное выражение:

("videoUrl":)("http.+")

Но это регулярное выражение соответствует следующей строке

    "videoUrl" :"http..."},
"account" : {"videoUrl" : "http...","login" : "","password" : ""

Как я могу написать регулярное выражение, которое найдет первый непустой videoUrl со значением

(Результат должен быть "videoUrl":"http...")

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Более подходящим будет использование одного из синтаксических анализаторов JSON, например Gson или Джексона, вместо регулярных выражений.Что-то вроде:

String jsonStr = "...";
Gson gson = new Gson();
JsonObject json = gson.fromJson(jsonStr, JsonObject.class);
String url = element.get("videoUrl").getAsString();
0 голосов
/ 23 мая 2018

Добавьте (?!,) в конце регулярного выражения, оно остановит регулярное выражение на , без его захвата:

public static void main(String[] args) {
    String input = "{  \n" +
            "   \"videoUrl\":\"\",\n" +
            "   \"available\":\"true\",\n" +
            "   \"movie\":{  \n" +
            "      \"videoUrl\":\"http...\"\n" +
            "   },\n" +
            "   \"account\":{  \n" +
            "      \"videoUrl\":\"http...\",\n" +
            "      \"login\":\"\",\n" +
            "      \"password\":\"\"\n" +
            "   }\n" +
            "} ";

    Pattern pattern = Pattern.compile("(\"videoUrl\":)(\"http.+\")(?!,)");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        System.out.println(matcher.group());  // "videoUrl":"http..."
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...