2017-08-26 124 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)" 
    } 

我有上面的示例JSON。 「enterVia」內的全部內容都是動態的。 我必須從響應中讀取嵌套的Json(如下所示),並在另一個請求中發送它。解析動態鍵和值嵌套json

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

如果可能使用Gson,ObjectMapper,請建議一種方法。

回答

0

我找到了一個使用ObjectMapper的解決方案。下面是代碼:該程序的

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); 
    } 

} 

輸出:

讀取響應輸出:{J1-B1 = [DEFAULT_ROUTE],A1-D1 = [DEFAULT_ROUTE]}

下一個請求輸出: {「J1-B1」:[「DEFAULT_ROUTE」],「A1-D1」:[「DEFAULT_ROUTE」]}