我正在接收来自外部服务的响应数据,需要解析接收到的字符串。问题是,某些字符串键/值使用 '
而不是 "
。我尝试过的第一个解决方案是使用 gsub 并将所有 '
替换为 "
但我收到了另一个问题 - 一些响应值包含 '
作为单词分隔符,它看起来像这 -
"{'text': \"Hi there-Thanks for writing in. Unfortunately, I don't\"}"
,所以当我替换 '
JSON 仍然无效。
我需要将其转换为有效格式,例如 -
"{\"text\": \"Hi there-Thanks for writing in. Unfortunately, I don't\"}"
答案 0 :(得分:1)
这些响应无法解析为 JSON 的原因是因为它们不是 JSON 字符串。这不是“替换”引号的问题,这些字符串缺少对 JSON 解析至关重要的引号。
以下是它们应该如何易于解析:
x = {text: "Hi there-Thanks for writing in. Unfortunately, I don't"}.to_json
# => "{\"text\":\"Hi there-Thanks for writing in. Unfortunately, I don't\"}"
JSON.parse(x) # should work ok
您可以做的是尝试使用 YAML.load
:
y = "{'text': \"Hi there-Thanks for writing in. Unfortunately, I don't\"}"
YAML.load(y)
z = "{\"text\": \"Hi there-Thanks for writing in. Unfortunately, I don't\"}"
YAML.load(z)
它适用于这 2 个字符串,但不确定其他响应的样子。