【问题标题】:How to handle JSON data which has = and : characters in json value in Android如何处理Android中json值中具有=和:字符的JSON数据
【发布时间】:2017-08-13 03:49:59
【问题描述】:

以下是我收到的 API 请求的 JSON 响应。

用户 = { '名称':'湿婆', '地址':'我的地址', '密码':12345, '网址':'http://myweb.com/index.php?title=firstname:lastname+middlename&action=edit' }

由于此 JSON 响应以 user = 开头,因此它既不是 JSONObject 也不是 JSONArray。 所以我认为这是字符串,我拆分响应

String[] response = responseBody.split("=");

Gson gson = new GsonBuilder().setLenient().create();

User user = gson.fromJson(response[1], User.class);

这会导致如下所示的 MalformedJsonException

原因:com.google.gson.stream.MalformedJsonException: Unterminated string at line 5 column 47 path $.url

我观察到 url 键的值会导致问题。因为它在 url 值中有 = 和 : 字符。但我没有找到合适的解决方案。

谁能帮我解决这个问题。

【问题讨论】:

  • 我一头雾水,song=是什么意思,即使不是JsonObject,也要解析成Json对象。从长远来看,这将使您的生活更轻松。
  • @Bqin,这是我的拼写错误。更新了帖子。请检查一下。
  • 创建一个与上述参数匹配的类,并使用 jsonParse(string value, object.class) 映射 Json 对象,这将使事情变得更容易
  • 您的 JSON 无效。您必须在后端代码中更改您的响应。并使用 : 而不是 =
  • @SajidhZahir,您能否提供一个带有 jsonParse(string value, object.class) 的示例。我很困惑,如何处理。

标签: android json gson retrofit


【解决方案1】:

由于你一直在使用 gson 可以做这样的事情

    Gson g = new Gson();

Person person = g.fromJson(responsejsonstring, Person.class);
System.out.println(person.name); //Johnh@gmail.com

System.out.println(g.toJson(person)); // {"email":"Johnh@gmail.com"}

【讨论】:

  • 我已经尝试过了,但它不起作用。它抛出与上面相同的异常。有没有其他选择。谢谢
  • 或者你可以尝试使用org Json库方法
  • JSONObject obj = new JSONObject("响应字符串"); String url = obj.getJSONObject("user").getString("url");
【解决方案2】:

response[1]得到这个之后,

{ 'name':'Siva', 'address':'my address', 'pincode':12345, 'url':'http://myweb.com/index.php?title=firstname:lastname+middlename&action=edit' }

首先将' 替换为"。像这样,

response[1] = response[1].replaceAll("\'", "\"");

检查之后的响应以确保所有' 实际上都被" 替换。

然后看它之后是否解析。

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多