2016-07-28 3 views
1

У меня есть задача разобрать Json на Java Class.jackson json to Object parsing

Json фрагмент Я пытаюсь разобрать и иметь проблемы с чем-то вроде древовидной структуры.

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

Я хотел бы использовать Джексон Mapper

Response response = mapper.readValue(jsonObjstring, Response.class); 

Проблема здесь в том, что я не знаю, как я могу описать класс Response здесь, так что это может быть автоматически анализироваться Джексона. Если это возможно.

Json:

[{ 
    "parameterName" : "name", 
    "parameterValue" : "value" 
}, { 
    "parameterName" : "apnRecord", 
    "parameterValue" : [{ 
    "parameterName" : "name", 
    "parameterValue" : "value" 
    }, { 
    "parameterName" : "name", 
    "parameterValue" : "value" 
    }, { 
    "parameterName" : "name", 
    "parameterValue" : "value" 
    }, { 
    "parameterName" : "name", 
    "parameterValue" : "value" 
    }, { 
    "parameterName" : "name", 
    "parameterValue" : "value" 
    }, { 
    "parameterName" : "name", 
    "parameterValue" : "value" 
    }] 
}] 
+0

Поделитесь фрагмент кода вместо того, чтобы просто бросать 'json' – Amolb

ответ

2

Вы можете попробовать это онлайн JSON в Java Pojo картографа, он производит требуемый результат, и это очень удобно для меня много раз.

http://pojo.sodhanalibrary.com/

Попробуйте и, если вы сталкиваетесь любые больше трудностей обеспечить полный JSON, вы получите, мы можем разработать некоторые вещи еще.

1

Создайте класс POJO Response.java, который содержит ваши поля и геттеры/сеттеры, создайте стандартный конструктор и тот, который содержит ваши поля, и метод toString(). Я покажу вам пример с аннотациями

определяет как класс:

@JsonAutoDetect 
@JsonSerialize 
public class Response implements Serializable 

тогда ваши поля с

@JsonProperty 
private String parameterName; 

и, наконец, ваши Конструкторы F.E. как этот

@JsonCreator 
public Response(@JsonProperty("parameterName") String parameterName) { 
    this.parameterName = parameterName; 
} 
+0

, но как это pojo должно выглядеть, когда Value может быть строкой или массивом? –

+0

tomas, это имя параметра является строкой, если вы хотите, чтобы другие переменные, такие как parameterValue, просто определяли их, как показано, если вы спрашиваете, как вы можете анализировать их в arraylist, im делает это таким образом -> ArrayList images = jsonMapper.readValue (json, jsonMapper.getTypeFactory(). constructCollectionType (ArrayList.класс, Image.class)); – kaya

0

Я определил его как

private List<List<Object>> resultParameters;

затем джексон maper разбирает его (объект) к LinkedHashMapEnty, когда это конечное значение или ArrayList - если это не значение, а другой Список значений;

Его можно закрыть;

0
package test; 

import java.io.IOException; 

import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.JsonNode; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class Test { 

    public static void main(String[] args) { 

     String readJsonAsString = "[{\r\n \"parameterName\" : \"name\",\r\n \"parameterValue\" : \"value\"\r\n}, {\r\n \"parameterName\" : \"apnRecord\",\r\n \"parameterValue\" : [{\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n }, {\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n }, {\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n }, {\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n }, {\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n }, {\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n }]\r\n}]"; 

     try { 

      ObjectMapper mapper = new ObjectMapper(); 
      JsonNode jsonNodes = mapper.readTree(readJsonAsString.toString()); 
      for (JsonNode jsonNode : jsonNodes) { 
       System.out.println(jsonNode.get("parameterName")); 
      } 


     } catch (JsonProcessingException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

} 

Необходимо преобразовать json в строковый формат, а затем ObjectMapper необходимо преобразовать его в древовидную структуру.

для этого вам нужно использовать 3 банки: ДЖЕКСОНА-аннотаций-2.3.5.jar ДЖЕКСОНА-ядро-2.3.5.jar ДЖЕКСОНА-DataBind-2.3.5.jar