2014-10-02 45 views
1

请不要将它标记为重复,我会经历许多这些相关的帖子,但徒劳无益。我是Android/Java编程新手,需要知道如何将json映射转换为java hashmap。请参考下面的代码:获取一个例外:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:期望在第1行第24列的':'

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(); 

        } 

需要被转换成散列映射的JSON如下:

{\"[email protected]\":\"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更易读:

[email protected] 

纬度: 0 lng:0 tim:“2014-10-01T16:55:15.002Z”

纬度:0 LNG:0 恬: “2014-10-01T16:18:07.290Z”

纬度:0 LNG:0 恬: “2014-10-01T12:04:06.364Z”

纬度:0 LNG:0 恬: “2014-10-01T11:58:04.455Z”

纬度:0 LNG:0 恬:“2014-10-01T11:46:24.560Z “

在这方面的任何帮助将不胜感激。

回答

1

你有没有试图把"围绕你的数值?

{"email":"[email protected]", 
"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"}]} 

曾经失踪引号的问题....不再100%肯定,如果它涉及到gsongenson.

添加:注意补充"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; 
} 
+0

我试过了,但没有帮助。你能否建议我应该如何将json转换为java哈希? – user1903022 2014-10-02 11:25:14

+0

我认为代码看起来不知何故如上所示。请注意我在JSON结构上的更新。如果你的第一个标识符是一个电子邮件地址,我希望有一些问题,所以我将它改为“email”。 – Trinimon 2014-10-02 13:30:46

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和你的问题应该得到解决。

+0

我尝试按照你的指令,但是,有这样的事情: {“AlertID”:“tim”,“lng”:0.0,“lat”:0.0} 我需要将整个json存储为java散列,这样,我可以随时访问它,只要我可能需要它。整个JSON看起来像: JSON [email protected] 纬度:0 LNG:0 恬: “2014-10-01T16:55:15.002Z” 纬度:0 LNG:0 添: “2014-10-01T16:18:07.290Z” 纬度:0 LNG:0 恬: “2014-10-01T12:04:06.364Z” 纬度:0 LNG:0 tim:“2014-10-01T11:58:04.455Z” lat:0 lng:0 tim:“2014-10-01T11:46:24.560Z” 请让我知道如何将它转换为java散列。非常感谢。 – user1903022 2014-10-02 11:20:48

+0

请更新您问题中的有效JSON。 – 2014-10-02 11:41:01

+0

已更新。请进一步建议。 – user1903022 2014-10-02 11:48:50

相关问题