【发布时间】:2013-12-27 05:59:30
【问题描述】:
美好的一天。我正在开发一个小应用程序,目前我正在尝试从 JSON 对象(在 CouchDB 上)解析 Unix 时间。我尝试了几种方法,但我认为这是最接近的一种。现在我得到 NumberFormatException: Invalid long: "Time" 错误
private Points parseJsonDocument(JSONObject json) throws JSONException, ParseException
{
String openKey = JSON_MAP.get(MAP_OPEN);
String closeKey = JSON_MAP.get(MAP_CLOSE);
String highKey = JSON_MAP.get(MAP_HIGH);
String lowKey = JSON_MAP.get(MAP_LOW);
String volumeKey = JSON_MAP.get(MAP_VOLUME);
String dateKey = JSON_MAP.get(MAP_DATE);
JSONObject object = json.getJSONObject("Stock");
JSONArray array = object.getJSONArray("Data");
// JSONArray array = json.getJSONArray("Data");
Points result = new Points();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //desired format
Long time = Long.parseLong(dateKey);
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time *1000);
for(int i=0;i<array.length();i++)
{
JSONObject obj = array.getJSONObject(i);
Point cp = new Point();
cp.c = obj.getDouble(closeKey);
cp.h = obj.getDouble(highKey);
cp.l = obj.getDouble(lowKey);
cp.o = obj.getDouble(openKey);
cp.v = obj.getDouble(volumeKey);
String date = obj.getString(dateKey);
cp.dt = df.parse(df.format(cal.getTime()));
result.add(cp);
}
return result;
}
JSON 对象如下所示:
{
"_id": "abbv",
"_rev": "12-3d250de8395a12e0c92dfb9d7d379fc4",
"Stock": {
"Data": [
{
"Time": "1386598949000",
"Open": "50.17",
"High": "0",
"Low": "0",
"Close": "51.37",
"Volume": "7285755"
}
]
}
这可能是一些愚蠢的错误,由于缺乏经验,我只是看不到,所以任何建议或指导将不胜感激。是的,我尝试阅读 javadocs,但找不到解决方案。 谢谢。
【问题讨论】:
-
什么是 JSON_MAP?看起来您可能正在尝试解析 JSON 键,而不是值(请参见 Long time = Long.parseLong(dateKey); 行)
-
这是一个 hashMap,这是我声明它们的原因:static { JSON_MAP = new HashMap
(); JSON_MAP.put(MAP_OPEN, "打开"); //剩下的 JSON_MAP.put(MAP_DATE, "Time"); } -
好吧,无论哪种方式 dateKey 总是会保持值 "Time" 然后,我相信这是你的问题,你试图将 "Time" 解析为 Long :)
-
我想我不能以漂亮的方式在 cmets 中格式化它
-
@panini 但它很长,不是吗? :)
标签: java android json parsing time