2013-05-28 2 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... 

у вас есть строка JSON, которая сама по себе является сог добавлен в строковый литерал. Это не на 100% уверен, что формат строки обертывания состоит в том, что существует множество форматов, которые используют \u и \" escapes - вы должны получить любую документацию, которую вы можете использовать в сервисе, который вы вызываете, чтобы попытаться выяснить, что это такое. Казалось бы странным и ненужным обернуть результат возврата веб-службы в формат строкового литерала, подобный этому.

Одна возможность - строковый литерал Java; в этом случае см. unescapeJava в StringEscapeUtils от Apache.

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

Предполагая, что вы используете org.json, однако, нет парсера JSONString, чтобы разобрать парсером JSONObject и JSONArray. Однако вы всегда можете обернуть строку в структуру, которая будет понимать один из них, например:

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

Я не могу найти никакой информации о самих данных. Можно ли вручную заменить все \ u000a новыми строками и т. Д.? – Lazze

+0

@ Lazze: маловероятно - могут быть специальные символы, кроме '\ u000A', которых у вас нет в вашем примере. Я бы ожидал увидеть реальную обратную косую черту, например, двойную обратную косую черту. И у вас есть '\ /' там для прямой косой черты, которая является загадкой, поскольку ни форматы букв Java, ни JSON не требуют этого (хотя и позволяют). Я бы пошел с декодером JSON до тех пор, пока вы не получите окончательного ответа от поставщика услуги, к которой вы подключаетесь. – bobince

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