【问题标题】:How can I parse this string that's similar to JSON?如何解析这个类似于 JSON 的字符串?
【发布时间】:2019-11-26 14:00:29
【问题描述】:

在我的项目中,我向 Stripe 提交了一个请求,该请求返回了一组存档的卡片

{
data = [{
    address_zip_check = null,
    country = US,
    last4 = 4242,
    funding = credit,
    metadata = {},
    address_country = null,
    address_state = null,
    exp_month = 4,
    exp_year = 2024,
    address_city = null,
    tokenization_method = null,
    cvc_check = pass,
    address_line2 = null,
    address_line1 = null,
    fingerprint = TAw8rdASXn64,
    name = null,
    id = card_1FiwAkASrE1bJO6aaQ,
    address_line1_check = null,
    address_zip = null,
    dynamic_last4 = null,
    brand = Visa,
    object = card,
    customer = cus_GDUhOvTHo9
}, {
    address_zip_check = null,
    country = US,
    last4 = 4444,
    funding = credit,
    metadata = {},
    address_country = null,
    address_state = null,
    exp_month = 4,
    exp_year = 2024,
    address_city = null,
    tokenization_method = null,
    cvc_check = pass,
    address_line2 = null,
    address_line1 = null,
    fingerprint = NW3wMUNiaA8g,
    name = null,
    id = card_1Fj3ZoASrE1bJO6aFu,
    address_line1_check = null,
    address_zip = null,
    dynamic_last4 = null,
    brand = MasterCard,
    object = card,
    customer = cus_GDUhOvTHo9
}], has_more = false, url = /v1/customers / cus_GDUhOvTHo9 / sources, object = list

}

问题在于JSONObjectJSONArray 无法将其识别为有效的 JSON。

JSONObject jsonObject = new JSONObject(jsonStr);
JSONArray jsonArray = jsonObject.getJSONArray("data");

"Expected literal value..."

我如何解析这些信息?

有没有办法修改这个字符串,使它可以被识别为有效的 JSON?

我需要自己写解析方法吗?

【问题讨论】:

  • 我要自己写解析方法吗?...我猜是的!
  • Stripe API 返回这样的东西是……很奇怪。无论如何,您可以使用他们提供的library 与他们的 API 进行交互吗?
  • @FedericoklezCulloca 必须使用后端作为中间人进行条带化请求。文档甚至说响应将返回一个有效的 json。 stripe.com/docs/api/cards/list -- "data": "value" 但是在后端调试响应返回的格式类似于 data: 'value' 并且当后端将其发送给客户端时,它的格式为 data = value。令人沮丧
  • 您所看到的key=value 格式是否有可能以某种方式以toString() 表示对象结构?大多数Map#toString 实现都会给出这种类型的表示,例如
  • @MarkPeters 我几分钟前刚刚写过。 :-)

标签: java json parsing


【解决方案1】:

返回文件

上的一组卡片
  1. Stripe-API 返回有效的 json [1]。

  2. 我猜失败发生在两者之间,例如当您序列化对文件的响应时。确保使用正确的 json 工具!

  3. 您的打印看起来像普通的Map.toString()。只需将地图直接传递给new JSONObject(mymap)

[1]curl https://api.stripe.com/v1/customers -u sk_test_4eC39HqLyjWDarjtT1zdp7dc:

【讨论】:

  • 我相信你是对的。我认为发生的事情是返回的对象是一个地图,但我期待一个 JSON 字符串。我很快会相应地更改我的代码,看看它是否有效,所以我可以接受这个作为答案,如果事实上是这样。
猜你喜欢
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
相关资源
最近更新 更多