【问题标题】:How to get JSON data from the text?如何从文本中获取 JSON 数据?
【发布时间】:2013-07-26 10:05:35
【问题描述】:

我有一个字符串,像这样:

sometext{"points":{"point":[{"lat":"55.68705772049725","lon":"21.127218855544925"},{"lat":"55.68714472465217","lon":"21.127141742035747"} ,{"lat":"55.6871934235096","lon":"21.12712439149618"},{"lat":"55.68733625113964","lon":"21.127151465043426"},{"lat":"55.68751168437302","lon": "21.12717761658132"},{"lat":"55.687646800652146","lon":"21.127120200544596"},{"lat":"55.68781033158302","lon":"21.1270347889512788"},9,8"lat:""45788"},9,8"lat:" "lon":"21.12691568210721"}]}}一些文本

regex 可以在Javascript 中提取JSON 吗?

附: 我得到了很多数据并将其加入到字符串中。所以我需要从该字符串中获取 json,因为可能有第一个对象的结尾和其他对象的开头

【问题讨论】:

  • 为什么? JSON.parse不够好?
  • @Jon JSON.parse() 将在此示例中抛出 SyntaxError: Unexpected token s
  • 在将JSON.parse传递给JSON.parse之前,您不能从字符串的开头和结尾删除sometext吗?
  • 我得到了很多数据并将其加入到字符串中。所以我需要从该字符串中获取 json,因为可能有第一个对象的结尾和其他对象的开头
  • @Kirix:如果您将 JSON 对象连接在一起,并且您可以控制该过程,请创建这些对象的有效 JSON 数组字符串,而不是任意字符串连接。您需要澄清整个格式是什么,尤其是sometext 部分。答案现在假设您在半随机字符串中有一个 JSON 对象(sometext 部分不包含任何[,{,},]),这可能不适用于您的情况。

标签: javascript regex json


【解决方案1】:

假设您在 JSON 部分之外没有大括号,并且假设编码的内容是您示例中的对象(不是数组),那么您可以这样做

var obj = JSON.parse(s.match(/({.*})/)[1]);

如果外面有大括号,则必须寻找更可靠的方法来检测 JSON 部分的开始和结束。

【讨论】:

  • 方括号呢? [55.68714472465217, 21.127141742035747] 也是有效的 JSON。
  • @PavloMykhalov 我在回答中提到了这一点。我猜想 OP 正在尝试,如在他的示例中,解析以 JSON 编码的特定对象。如果 OP 说他可能必须处理顶级数组,那么我会做出更复杂的答案。
  • 问题是我找不到这个解决方案。
  • @Kirix 你到底是什么意思?您的文本中是否有多个 JSON 文本?你有顶级数组吗?
【解决方案2】:
var str = 'sometext{"points":{"point":[{"lat":"55.68705772049725","lon":"21.127218855544925"},{"lat":"55.68714472465217","lon":"21.127141742035747"},{"lat":"55.6871934235096","lon":"21.12712439149618"},{"lat":"55.68733625113964","lon":"21.127151465043426"},{"lat":"55.68751168437302","lon":"21.12717761658132"},{"lat":"55.687646800652146","lon":"21.127120200544596"},{"lat":"55.68781033158302","lon":"21.127034788951278"},{"lat":"55.687981490045786","lon":"21.12691568210721"}]}}sometext';

var object = JSON.parse(str.match(/({.*})/).pop());

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2015-04-03
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多