2017-08-26 3 views
0
{ 
    "buildingNumber": 123, 
    "apatmentNumber": "4567", 
    "apartments": "123", 
    "isActive": true, 
    "possibleActions": [ 
    "ENTER", 
    "EXIT" 
    ], 
    "enterVia": { 
    "J1-B1": [ 
     "DEFAULT_ROUTE" 
    ], 
    "A1-D1": [ 
     "DEFAULT_ROUTE" 
    ] 
    }, 
    "SectionMap": {}, 
    "route": "abc|def (via xyz)" 
    } 

J'ai ci-dessus l'échantillon JSON. Tout le contenu de "enterVia" est dynamique. Je dois lire ce fichier JSON imbriqué (illustré ci-dessous) à partir d'une réponse et l'envoyer dans une autre requête.Analyse de la clé dynamique et de la valeur json emboîtée

{ 
    "J1-B1": [ 
     "DEFAULT_ROUTE" 
    ], 
    "A1-D1": [ 
     "DEFAULT_ROUTE" 
    ] 
} 

S'il vous plaît suggérer un moyen si cela est possible en utilisant Gson, ObjectMapper.

Répondre

0

J'ai trouvé une solution utilisant ObjectMapper. Voici le code:

import java.io.IOException; 
import java.util.List; 
import java.util.Map; 
import com.fasterxml.jackson.core.JsonParseException; 
import com.fasterxml.jackson.core.JsonParser; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.core.type.TypeReference; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class JsonParseTest { 

    public static void main(String[] args) { 

     String json = "{\r\n\t\"J1-B1\": [\r\n\t\t\"DEFAULT_ROUTE\"\r\n\t],\r\n\t\"A1-D1\": [\r\n\t\t\"DEFAULT_ROUTE\"\r\n\t]\r\n}"; 

     ObjectMapper objectMapper = new ObjectMapper(); 
     Map<String, List<String>> routesMap = null; 
     try { 
      routesMap = objectMapper.readValue(json, new TypeReference<Map<String, List<String>>>(){}); 
     } catch (JsonParseException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (JsonMappingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     System.out.println("read response output: " +routesMap); 


     objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); 
     String jsonRequest = null; 

     try { 
      jsonRequest = objectMapper.writeValueAsString(routesMap); 
     } catch (JsonProcessingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     System.out.println("next request output: " +jsonRequest); 
    } 

} 

sortie du programme:

lu sortie de réponse: {J1-B1 = [default_route], A1-D1 = [default_route]}

sortie de demande suivante: {"J1-B1": ["DEFAULT_ROUTE"], "A1-D1": ["DEFAULT_ROUTE"]}