2012-02-14 41 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