2016-12-05 4 views
1

Я разбираю файл JSON с использованием аннотации Джексона и, в частности, JsonProperty в Scala.Разбор вложенных Json с помощью Jackson Annotation в Scala

JSON файл приходит как:

{ 
    "expand":"schema", 
    "maxResults":50, 
    "total":542, 
    "issues":[ 
     { 
     "expand":"operation,transit", 
     "id":"23121", 
     "fields":{ 
      "customfield":null, 
      "priority":{ 
       "name":"This", 
       "id":"35" 
      } 
     } 
     } 
    ] 
} 

Я создал класс случая, который делает хорошую работу в разборе атрибуты верхнего уровня, но у меня есть проблема, когда приходится анализировать вложенные значения (например issues.fields.priority.id)

фрагмент кода является:

case class GetResults(

@JsonProperty("expand") expand:String 

@JsonProperty("maxResults") maxResults: Int 

@JsonProperty("total") total: Int 

@JsonProperty("issues") issues: JValue 

Таким образом, я получаю все значения, которые включены в вопросы, как JValue, но я не могу разобрать их по телефону что-то вроде issues.fields.priority.id

Я попытался: @JsonProperty("issues") issues.fields.priority.id: Int, но он не работает.

Любая подсказка о том, как я могу это сделать, используя этот конкретный класс case и аннотацию jackson?

+0

Hi iolkos, у вас JSON странный вид. Не могли бы вы исправить это? –

+0

На ваш вопрос, не хотите ли вы определить класс case для свойства fields? –

+0

Но как я могу определить класс case внутри свойства «issues»? @AlbanDericbourg. Что вы имеете в виду в формате JSON? – Iolkos

ответ

0

Вы можете определить вложенные классы случай:

case class GetResults (
    expand: String, 
    maxResults: Int, 
    total: Int, 
    issues: Seq[Issues] 
) 

case class Issues (
    expand: String, 
    id: Int, 
    fields: Fields 
) 

case class Fields (
    customfield: ???, 
    priority: Priority 
) 

case class Priority (
    name: String, 
    id: Int 
) 

я удалил @JsonProperty аннотаций, чтобы облегчить чтение, но вы на самом деле нужно добавить их так же, как вы сделали.

+0

Проблема заключается в том, что внутри полей есть около 150 атрибутов, которые необходимо определить вручную, и многие из них (например, «Приоритет» нуждаются в дополнительных определениях). Мне было интересно, был ли более простой и автоматический способ, который поможет мне прочитать определенные значения, которые я хочу после разбора. – Iolkos

+0

Сопоставление их как карты? –

+0

Как это будет работать? – Iolkos

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