请不要将其标记为重复,我经历了许多相关的帖子,但是徒劳无功。我是Android / Java编程的新手,需要帮助知道如何将json映射转换为java hashmap。请参考以下代码:
HttpPost httpPost1 = new HttpPost(
"http://www.mywebsite.com/something.json" );
Log.i("MAP", "Hash call");
List<NameValuePair> nameValuePair1 = new ArrayList<NameValuePair>(1);
nameValuePair1.add(new BasicNameValuePair("id_token", token ));
try {
httpPost1.setEntity(new UrlEncodedFormEntity(nameValuePair1));
} catch (UnsupportedEncodingException e) {
// writing error to Log
e.printStackTrace();
}
// Making HTTP Request
try {
HttpResponse response1 = httpClient.execute(httpPost1);
BufferedReader reader = new BufferedReader(new InputStreamReader(response1.getEntity().getContent(), "UTF-8"));
StringBuilder builder = new StringBuilder();
for (line = null; (line = reader.readLine()) != null;) {
// builder.append(line).append("\n");
System.out.println(line);
Log.i("Line1", "line1 "+ line);
class Data {
private Email email;
private String result;
// Add/generate getters and setters.
class Email {
private List<Alert> alerts;
private String session;
// Add/generate getters and setters.
}
class Alert {
private Long AlertID;
private String tim;
private String lng;
private String lat;
}
}
Gson gson=new Gson();
String json="{\"AlertID\":\"tim\",\"lng\",\"lat\"}";
Map<String,String> map=new HashMap<String,String>();
java.lang.reflect.Type type = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> myMap = gson.fromJson("{\"AlertID\":\"tim\",\"lng\",\"lat\"}", type);
System.out.println(json);
Log.i("JAVA Hash", "Java Hash call");
}//Closing for loop//line
JSONTokener tokener = new JSONTokener(builder.toString());
JSONArray finalResult = new JSONArray(tokener);
// writing response to log
Log.i("Http Response:", response1.toString());
Log.i("JSON returns: ", "JSON returns");
} catch (ClientProtocolException e) {
// writing exception to log
e.printStackTrace();
} catch (IOException e) {
// writing exception to log
e.printStackTrace();
}
需要转换为hashmap的json如下:
{\"myemailid@gmail.com\":\"lat\":0.0,\"lng\":0.0,\"tim\":"2014-10-02T10:38:11.437Z"},{"lat":0.0,"lng":0.0,"tim":"2014-10-02T08:56:38.459Z"},{"lat":0.0,"lng":0.0,"tim":"2014-10-02T08:47:18.713Z"},{"lat":0.0,"lng":0.0,"tim":"2014-10-02T08:43:58.145Z"},{"lat":0.0,"lng":0.0,"tim":"2014-10-02T08:34:08.798Z"}]}
只是为了让json更具可读性:
myemailid@gmail.com
lat:0 lng:0 蒂姆:&#34; 2014-10-01T16:55:15.002Z&#34;
lat:0 lng:0 蒂姆:&#34; 2014-10-01T16:18:07.290Z&#34;
lat:0 lng:0 蒂姆:&#34; 2014-10-01T12:04:06.364Z&#34;
lat:0 lng:0 蒂姆:&#34; 2014-10-01T11:58:04.455Z&#34;
lat:0 lng:0 蒂姆:&#34; 2014-10-01T11:46:24.560Z&#34;
在这方面的任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
您是否尝试将"
置于数字值附近?
{"email":"myemailid@gmail.com",
"items":[{"lat":"0.0","lng":"0.0","tim":"2014-10-02T08:56:38.459Z"},
{"lat":"0.0","lng":"0.0","tim":"2014-10-02T08:47:18.713Z"},
{"lat":"0.0","lng":"0.0","tim":"2014-10-02T08:43:58.145Z"},
{"lat":"0.0","lng":"0.0","tim":"2014-10-02T08:34:08.798Z"},
{"lat":"0.0","lng":"0.0","tim":"2014-10-02T08:28:21.437Z"}]}
曾经发现缺少引号的问题......如果与gson或genson.
相关,则不再100%确定 已添加:注意上面添加了"email"
和"items"
Gson gson = new GsonBuilder().create();
ResultJson result = gson.fromJson(jsonStringAsShownAbove, ResultJson.class);
class ResultJson {
private String email;
private List<TimeAndLocation> items = new ArrayList<TimeAndLocation>();
}
class TimeAndLocation {
private double lat;
private double lon;
private String tim;
}
答案 1 :(得分:0)
您获得此异常的原因是因为您没有使用您在问题中发布的JSON。
而是使用JSON:
{\"AlertID\":\"tim\",\"lng\",\"lat\"}
您在代码中的以下行中使用的:
Map<String, String> myMap = gson.fromJson("{\"AlertID\":\"tim\",\"lng\",\"lat\"}", type);
上面的JSON显然是格式错误的JSON,因为属性lng
没有与之对应的值,而有效的JSON必须具有该值。所以,理想情况下你的JSON应该是这样的:
{\"AlertID\":\"tim\",\"lng\":0.0,\"lat\":0.0}
尝试使用实际结构良好的JSON,您的问题应该得到解决。