获得例外:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:Expected':'在第1栏第24栏

时间:2014-10-02 09:02:30

标签: java android json map hashmap

请不要将其标记为重复,我经历了许多相关的帖子,但是徒劳无功。我是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;

在这方面的任何帮助都将受到高度赞赏。

2 个答案:

答案 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"}]}

曾经发现缺少引号的问题......如果与gsongenson.

相关,则不再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,您的问题应该得到解决。