2013-05-28 4 views
0
내 JSON 문자열은 다음과 같습니다

:구문 분석 JSON 데이터

"{\"TrackingInformationResponse\": {\u000a \"shipments\": [\u000a {\u000a  \"shipmentId\": \"03015035146308\",\u000a  \"uri\": \"\/ntt-service-rest\/api\/shipment\/03015035146308\/0\",\u000a  \"assessedNumberOfItems\": 1,\u000a  \"deliveryDate\": \"2013-05-13T11:47:00\",\u000a  \"estimatedTimeOfArrival\": \"2013-05-13T16:00:00\",\u000a  \"service\": {\u000a  \"code\": \"88\",\u000a  \"name\": \"DPD\"\u000a  },\u000a  \"consignor\": {\u000a  \"name\": \"Webhallen Danmark ApS\",\u000a  \"address\": {\u000a   \"street1\": \"Elsa Brändströms Gata 52\",\u000a   \"city\": \"HÄGERSTEN\",\u000a   \"countryCode\": \"SWE\",\u000a   \"country\": \"Sverige\",\u000a   \"postCode\": \"12952\"\u000a  }\u000a  },\u000a  \"consignee\": {\u000a  \"name\": \"Lene Bjerre Kontor & IT Service\",\u000a  \"address\": {\u000a   \"street1\": \"Lene Bjerre\",\u000a   \"street2\": \"Ørbækvej 8, Hoven\",\u000a   \"city\": \"TARM\",\u000a   \"countryCode\": \"???\",\u000a   \"postCode\": \"6880\"\u000a  }\u000a  },\u000a  \"statusText\": {\u000a  \"header\": \"Forsendelsen er udleveret\",\u000a  \"body\": \"Forsendelsen blev leveret 13-05-2013 kl. 11:47\"\u000a  },\u000a  \"status\": \"DELIVERED\",\u000a  \"totalWeight\": {\u000a  \"value\": \"0.55\",\u000a  \"unit\": \"kg\"\u000a  },\u000a  \"totalVolume\": {\u000a  \"value\": \"0.005\",\u000a  \"unit\": \"m3\"\u000a  },\u000a  \"items\": [\u000a  {\u000a   \"itemId\": \"03015035146308\",\u000a   \"dropOffDate\": \"2013-05-08T17:18:00\",\u000a   \"deliveryDate\": \"2013-05-13T11:47:00\",\u000a   \"status\": \"DELIVERED\",\u000a   \"statusText\": {\u000a   \"header\": \"Forsendelsen er udleveret til modtageren\",\u000a   \"body\": \"Forsendelsen blev udleveret 13-05-2013 kl. 11:47\"\u000a   },\u000a   \"statedMeasurement\": {\u000a   \"weight\": {\u000a    \"value\": \"0.55\",\u000a    \"unit\": \"kg\"\u000a   },\u000a   \"length\": {\u000a    \"value\": \"0.28\",\u000a    \"unit\": \"m\"\u000a   },\u000a   \"height\": {\u000a    \"value\": \"0.1\",\u000a    \"unit\": \"m\"\u000a   },\u000a   \"width\": {\u000a    \"value\": \"0.2\",\u000a    \"unit\": \"m\"\u000a   },\u000a   \"volume\": {\u000a    \"value\": \"0.005\",\u000a    \"unit\": \"m3\"\u000a   }\u000a   },\u000a   \"events\": [\u000a   {\u000a    \"eventTime\": \"2013-05-08T16:42:00\",\u000a    \"eventCode\": \"68\",\u000a    \"eventDescription\": \"Oplysning om forsendelsen er modtaget\",\u000a    \"location\": {\u000a    \"displayName\": \"Webhallen Danmark ApS\",\u000a    \"name\": \"Webhallen Danmark ApS\",\u000a    \"countryCode\": \"SWE\",\u000a    \"country\": \"Sverige\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-08T17:18:00\",\u000a    \"eventCode\": \"74\",\u000a    \"eventDescription\": \"Transporten af forsendelsen er påbegyndt\",\u000a    \"location\": {\u000a    \"locationId\": \"126\",\u000a    \"displayName\": \"Segeltorp\",\u000a    \"name\": \"Segeltorp\",\u000a    \"countryCode\": \"SWE\",\u000a    \"country\": \"Sverige\",\u000a    \"postcode\": \"14172\",\u000a    \"city\": \"Segeltorp\",\u000a    \"locationType\": \"HUB\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-08T17:18:00\",\u000a    \"eventCode\": \"31\",\u000a    \"eventDescription\": \"Forsendelsen er på vej\",\u000a    \"location\": {\u000a    \"locationId\": \"126\",\u000a    \"displayName\": \"Segeltorp\",\u000a    \"name\": \"Segeltorp\",\u000a    \"countryCode\": \"SWE\",\u000a    \"country\": \"Sverige\",\u000a    \"postcode\": \"14172\",\u000a    \"city\": \"Segeltorp\",\u000a    \"locationType\": \"HUB\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-10T04:34:00\",\u000a    \"eventCode\": \"31\",\u000a    \"eventDescription\": \"Forsendelsen er på vej\",\u000a    \"location\": {\u000a    \"locationId\": \"201\",\u000a    \"displayName\": \"Malmö\",\u000a    \"name\": \"Malmö\",\u000a    \"countryCode\": \"SWE\",\u000a    \"country\": \"Sverige\",\u000a    \"postcode\": \"21241\",\u000a    \"city\": \"Malmö\",\u000a    \"locationType\": \"HUB\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-10T22:46:13\",\u000a    \"eventCode\": \"31\",\u000a    \"eventDescription\": \"Forsendelsen er på vej\",\u000a    \"location\": {\u000a    \"locationId\": \"0707\",\u000a    \"displayName\": \"Kolding Pakkecenter\",\u000a    \"name\": \"Kolding Pakkecenter\",\u000a    \"countryCode\": \"DNK\",\u000a    \"country\": \"Danmark\",\u000a    \"postcode\": \"2605\",\u000a    \"city\": \"Brøndby\",\u000a    \"locationType\": \"HUB\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-11T01:05:00\",\u000a    \"eventCode\": \"31\",\u000a    \"eventDescription\": \"Forsendelsen er på vej\",\u000a    \"location\": {\u000a    \"locationId\": \"0050\",\u000a    \"displayName\": \"Kolding\",\u000a    \"name\": \"Kolding\",\u000a    \"countryCode\": \"DNK\",\u000a    \"country\": \"Danmark\",\u000a    \"locationType\": \"DPD_DEPOT\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-13T07:59:00\",\u000a    \"eventCode\": \"113\",\u000a    \"eventDescription\": \"Forsendelsen gøres klar til levering\",\u000a    \"location\": {\u000a    \"locationId\": \"0506\",\u000a    \"displayName\": \"Herning\",\u000a    \"name\": \"Herning\",\u000a    \"countryCode\": \"DNK\",\u000a    \"country\": \"Danmark\",\u000a    \"locationType\": \"DPD_DEPOT\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-13T07:59:00\",\u000a    \"eventCode\": \"31\",\u000a    \"eventDescription\": \"Forsendelsen er på vej\",\u000a    \"location\": {\u000a    \"locationId\": \"0506\",\u000a    \"displayName\": \"Herning\",\u000a    \"name\": \"Herning\",\u000a    \"countryCode\": \"DNK\",\u000a    \"country\": \"Danmark\",\u000a    \"locationType\": \"DPD_DEPOT\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-13T07:59:44\",\u000a    \"eventCode\": \"z65\",\u000a    \"eventDescription\": \"Forsendelsen er ankommet distributionscenter\",\u000a    \"location\": {\u000a    \"locationId\": \"6900\",\u000a    \"displayName\": \"Skjern\",\u000a    \"name\": \"Skjern Distributionscenter\",\u000a    \"countryCode\": \"DNK\",\u000a    \"country\": \"Danmark\",\u000a    \"postcode\": \"6900\",\u000a    \"city\": \"Skjern\",\u000a    \"locationType\": \"DEPOT\"\u000a    }\u000a   },\u000a   {\u000a    \"eventTime\": \"2013-05-13T11:47:00\",\u000a    \"eventCode\": \"21\",\u000a    \"eventDescription\": \"Forsendelsen er udleveret\",\u000a    \"location\": {\u000a    \"locationId\": \"0506\",\u000a    \"displayName\": \"Herning\",\u000a    \"name\": \"Herning\",\u000a    \"countryCode\": \"DNK\",\u000a    \"country\": \"Danmark\",\u000a    \"locationType\": \"DPD_DEPOT\"\u000a    }\u000a   }\u000a   ],\u000a   \"references\": [\u000a   {\u000a    \"value\": \"5008074\",\u000a    \"type\": \"CU\",\u000a    \"name\": \"Afsenderreference \"\u000a   }\u000a   ]\u000a  }\u000a  ],\u000a  \"additionalServices\": [\u000a  ],\u000a  \"splitStatuses\": [\u000a  ],\u000a  \"shipmentReferences\": [\u000a  {\u000a   \"value\": \"5008074\",\u000a   \"type\": \"CU\",\u000a   \"name\": \"Afsenderreference \"\u000a  }\u000a  ]\u000a }\u000a ]\u000a}}" 

나는 다음과 같은 코드를 사용하여 서버에서 데이터를 얻고있다 : 내가 가진 문자열을 구문 분석 할 때

public String readJSONFeed(String URL) { 
    StringBuilder stringBuilder = new StringBuilder(); 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet(URL); 
    try { 
     HttpResponse response = httpClient.execute(httpGet); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) { 
      HttpEntity entity = response.getEntity(); 
      InputStream inputStream = entity.getContent(); 
      BufferedReader reader = new BufferedReader(
        new InputStreamReader(inputStream, "UTF-8")); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       stringBuilder.append(line); 
      } 
      inputStream.close(); 
     } else { 
      Log.d("JSON", "Failed to download file"); 
     } 
    } catch (Exception e) { 
     Log.d("readJSONFeed", e.getLocalizedMessage()); 
    }   
    return stringBuilder.toString(); 
} 

JSONObject jsonObject = new JSONObject(result); 

예외가 발생합니다. JSON이 유효하지 않기 때문일 가능성이 큽니다. "

  • \의 u000a는 \
  • 처음이자 마지막"단지로 대체됩니다 "새로운 라인으로 대체
  • 을 제거 : 내가 수동으로이 같은 유니 코드 문자를 교체하려고하면, 그것은 완벽하게 작동

가 어떻게이 데이터를 구문 분석에 대한 갈 것이라고 ?

+0

을 내가 당신을 도울 것 같아요 : http://stackoverflow.com/questions/3537706/howto-unescape-a- java-string-literal-in-java/4298836 # 4298836 – reidzeibel

답변

0
"{\"TrackingInformationResponse\": {\u000a \"shipments\": [\u000a... 

당신은 그 자체가 WR하는 JSON 문자열을 문자열 리터럴 형식으로 apped. \u\" 이스케이프를 사용하는 많은 형식이 있기 때문에 래핑 문자열 형식이 무엇인지 100 % 확신 할 수 없습니다. 호출 할 서비스에서 제공 할 수있는 문서를 얻을 수 있어야합니다. 웹 서비스 리턴 결과를 이와 같은 문자열 리터럴 형식으로 랩핑하는 것은 이상하고 불필요한 것처럼 보일 것입니다.

하나의 가능성은 Java 문자열 리터럴입니다. 이 경우 Apache의 StringEscapeUtils에서 unescapeJava을 참조하십시오.

하지만 아마도 JSON 문자열 리터럴 (예 : double-JSON 인코딩) 일 가능성이 큽니다. 이 경우에는 문자열을 한 번 JSON 디코드해야만 내부에 중첩 된 JSON 구조가 표시됩니다.

org.json을 사용한다고 가정하면 JSONObjectJSONArray 파서와 함께 사용하는 직접 JSONString 파서는 없습니다. 당신은 항상 예를 ​​들어, 그 중 하나가 이해할 수있는 구조에 문자열, 포장 할 수 그러나 :

String unwrapped= new JSONArray("["+result+"]").get(0); 
JSONObject o= new JSONObject(unwrapped); 
+0

데이터 자체에 대한 정보를 찾을 수 없습니다. 수동으로 모든 \ u000a를 새 줄 등으로 바꿀 수 있습니까? – Lazze

+0

@Lazze : 가능성은 희박합니다. - 예에서 \ u000A가 아닌 특수 문자가있을 수 있습니다. 예를 들어, 이중 백 슬래시로 인코딩 된 실제 백 슬래시를 볼 수 있습니다. 그리고 당신은 거기에'\ /'자바와 JSON 리터럴 포맷이 이스케이프를 요구하지 않기 때문에 슬래시 (슬래시)가 있습니다. 나는 당신이 연결하고있는 서비스 제공자로부터 확실한 답을 얻을 수있을 때까지는 JSON 디코더를 사용할 것이다. – bobince