2012-02-14 19 views
0
{"1": { 
     "StoreName": "イオン八千代緑が丘店", 
     "StoreTel": "047-480-3660", 
     "StoreAddress": "〒276-0049 千葉県八千代市緑ヶ丘2-1-3 2F", 
     "WorkingTimeInNormalDay": "7:30 AM - 9:00PM", 
     "WorkingTimeInWeekend": "9:00-22:00", 
     "HaveKidProduct": "N" 
    }} 

我想讀這個JSON:JSONArray用 「:」 字符的Android

JSONObject json ,jChild; 
JSONArray jsonNames, jsonValues; 
JSONArray jChildNames,jChildValues; 
json = new JSONObject(resultString); 

jsonNames = json.names(); 
jsonValues = json.toJSONArray(jsonNames); 
for (int i = 0; i < jsonNames.length(); i++) { 
jChild = jsonValues.getJSONObject(i); 
jChildNames = jChild.names(); 
jChildValues = jChild.toJSONArray(jChildNames); 

Log.i(getCallingPackage(), "No : " + jsonNames.getString(i)); 
       for (int j = 0; j < jChildNames.length(); j++){ 
        Log.i(getCallingPackage(),jChildNames.getString(j) + " : " + jChildValues.getString(j).trim()); 

       } 

} 
} 

有問題,這裏是: 當我解析此:

「WorkingTimeInNormalDay」:「7: 30 AM - 9:00 PM」,我有

jChildValues.getString(j)的迴歸 「7」 而不是 「7:30 AM - 9:00 PM」

我認爲可能是「:」字符是根本原因

我該如何解決這個問題?

感謝

===========

編輯:

這是我的錯誤

一切工作就像一個冠軍

+1

沒有,'「7:30 AM - 9:00 PM」'不應該引起任何問題,因爲它的雙引號 – waqaslam 2012-02-14 12:30:49

+0

內封閉的,但如果我沒有「WorkingTimeInNormalDay」: 「7:30 AM - 9:00 PM」, 「WorkingTimeInWeekend」:「9:00-22:00」,一切正常 – 2012-02-14 12:56:05

+0

我認爲這是一個編碼問題。打印你的json字符串。 – Fredrik 2012-02-14 13:12:48

回答

0

哦,有沒有問題 「:」 字符。

有一個我的大錯誤。

一切工作做好

對不起

1

解析之前json嘗試打印總json字符串,以便您知道「WorkingTimeInNormalDay」:「7:30 AM - 9:00 PM」會正確或不正確。 因爲如果你解析JSON的WorkingTimeInNormalDay會給你7:30 AM - 9:00 PM

+0

「StoreName」:「イオン八千代綠が丘店」, 「StoreTel」:「047-480-3660」, 「StoreAddress」:「〒276-0049千葉県八千代市綠ヶ丘2-1-3 2F」,i can正確解析所有這些文件 – 2012-02-14 12:52:09

+0

WorkingTimeInNormalDay打印正確嗎??? – Vamshi 2012-02-14 12:55:50

+1

是的,示例JSON似乎被正確格式化(通過添加所需的{}以使其成爲JSON對象) - 因此看起來您的實際輸入無效。如果您從外部可用的源獲取JSON,則應考慮通過[在線驗證程序(如此)]運行它(http://jsonformatter.curiousconcept.com/)。 – Jens 2012-02-14 13:12:05

1

以及它在這裏工作:

String json = "{\"1\": [{\"StoreName\": \"イオン八千代緑が丘店\",\"StoreTel\": \"047-480-   3660\"," + 
       "\"StoreAddress\": \"〒276-0049 千葉県八千代市緑ヶ丘2-1-3 2F\"," + 
       "\"WorkingTimeInNormalDay\": \"7:30 AM - 9:00PM\"," + 
       "\"WorkingTimeInWeekend\": \"9:00-22:00\"," + 
       "\"HaveKidProduct\": \"N\"" + 
       "}]}"; 


      try { 
       JSONObject e = new JSONObject(json); 
       JSONArray jArray = e.getJSONArray("1"); 
       for(int i=0;i<jArray.length();i++){ 
       JSONObject obj = jArray.getJSONObject(i); 
       System.out.println(obj.getString("WorkingTimeInNormalDay")); 
       } 

       System.out.println(jArray.getString(0)); 
      } catch (JSONException e) { 
       Log.e("log_tag", "Error parsing data " + e.toString()); 
      } 
+0

如何添加\ automaticaly – 2012-02-14 13:26:24

+0

如果您仔細觀察,我沒有逃過它。我沒有逃避:標誌。我躲過了雙引號。 – 2012-02-14 13:31:23

1

看看在Google GSON庫爲Android。 您可以輕鬆地爲特定數據類型添加自己的解析器。

例如:

public class DateDeserializer implements JsonDeserializer<Date> 
{ 
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException 
    { 
     String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/"; 
     Pattern pattern = Pattern.compile(JSONDateToMilliseconds); 
     Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString()); 
     String result = matcher.replaceAll("$2"); 

     return new Date(new Long(result)); 
    } 
} 
+0

但是這會讓你用你的APK打包該庫,而不是僅僅使用本地的。 – 2012-02-14 13:59:53