2016-12-08 2 views
1

Мне нужно взять данные из json-файла, который имеет странную структуру, и я не могу найти решение для него. Я использую restAssured с jsonPath и когда я пытаюсь получить данные для конкретной недели, как этогоRestAssured JsonPath: проблема с получением данных от json

getJsonPath().getList("years.2017.weeks.find{it.isoWeekNum == '1'}") 

я получаю ошибку

Invalid JSON expression: Script1.groovy: 1: unexpected token: 2017 @ line 1, column 33. 
years.2017.weeks.find{it.isoWeekNum == '1'} 

В то же время я могу получить данные с этим выражением

getJsonPath().getList("years.2017.weeks")

, который возвращает мне весь список недель.

Единственный способ, который я нашел, чтобы получить то, что мне нужно, как этот

getJsonPath().getList("years[1]['2017'].weeks.find{it.isoWeekNum == '1'}")

Но это не то, что я ищу. Мне нужно найти решение, где я могу получить данные без лет [1] на 2017 год и годы [0] для 2016

"{ 
    "years": [ 
    { 
     "2016": { 
     "currentIsoWeek": "49", 
     "currentTourWeek": "49", 
     "weeks": [ 
      { 
      "isoWeekNum": "1", 
      "tourWeekNum": "1", 
      "categories": [] 
      }, 
      { 
      "isoWeekNum": "2", 
      "tourWeekNum": "2", 
      "categories": [] 
      } 
     ] 
     } 
    }, 
    { 
     "2017": { 
     "currentIsoWeek": "", 
     "currentTourWeek": "", 
     "weeks": [ 
      { 
      "isoWeekNum": "1", 
      "tourWeekNum": "1", 
      "categories": [] 
      }, 
      { 
      "isoWeekNum": "2", 
      "tourWeekNum": "2", 
      "categories": [] 
      } 
     ] 
     } 
    } 
    ] 
} 

ответ

1

Надежда следующий код в точности то, что вы ищете:

public static void main(final String[] args) { 
    JsonPath jsonPath = new JsonPath(yourJson).using(new JsonPathConfig("UTF-8")); 

    System.out.println(
      jsonPath.get("years['2017'].weeks*.find {it.isoWeekNum == '1'}") 
    ); 
} 
+0

Большое спасибо, что я долгое время занимался этой проблемой, и, наконец, я получил решение. – Roman

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