【问题标题】:Javascript: How to parse data from this string [closed]Javascript:如何解析此字符串中的数据[关闭]
【发布时间】:2021-04-30 02:52:45
【问题描述】:

我从服务器返回了以下字符串:

{"href":"about:blank#&executeFunction<-finishedStroke&&arguments<-{\"base64DataUrl\":\"data:image/png;base64,iVBORw0KGgoAAErkJggg==\"}&"}

我想从中提取data:image/png;base64,iVBORw0KGgoAAErkJggg==(base64DataURL 部分)。使用 Javascript 执行此操作的最佳方法是什么?

请注意,我问的是如何解析 JSON 中的值。这与this question 不同,后者询问如何从嵌套对象和数组中提取字段。

我试过了:我试过了

JSON.parse(<string>).href.split('base64DataUrl":"')[1].split('"')[0]

这会产生正确的答案,但我希望有一个更简洁的解决方案。

【问题讨论】:

  • @Phil 你知道我是否有办法删除重复的标签吗?我编辑了问题以指定它与其他问题不同,但重复的标签仍然存在。
  • 仅仅说“这不一样”是不够的。您还应该解释原因。无论如何,我已经重新打开了这个,但你仍然应该提供一个解释。在编辑问题时,您还应该展示您尝试过的内容
  • @Phil 已编辑 ^^
  • 等等,您的单线解决方案有效,但您想要更好的东西?我真的不明白为什么这是一个问题
  • 没错,虽然我的解决方案是一行,但我很想知道是否有没有那么多链式函数的解决方案。

标签: javascript json string parsing


【解决方案1】:

这个 JSON,但您感兴趣的部分并未作为对象的一部分公开。因此,我建议您将其视为字符串并使用字符串解析方法,例如正则表达式。

const string = `{"href":"about:blank#&executeFunction<-finishedStroke&&arguments<-{\"base64DataUrl\":\"data:image/png;base64,iVBORw0KGgoAAErkJggg==\"}&"}`;

const dataURL = /"base64DataUrl":"(.*?(?="))/gm.exec(string)[1];
console.log(dataURL);

【讨论】:

  • 好的,感谢您澄清作为对象的一部分公开的内容。正则表达式有效!
【解决方案2】:

由于服务器没有返回有效的 JSON,您必须使用 indexOfsubstring 对其进行解析。

let y = stringFromServer; 
let a = y.indexOf('data:'); 
let b = y.indexOf('\"}',a); 
let dataUrl = y.substring(a,b);

【讨论】:

  • 或者使用@matthew-e-brown 建议的正则表达式
  • 在什么方面它不是有效的JSON?
  • 当我把它扔到JSON.parse时,我得到了错误1 Uncaught SyntaxError: Unexpected token b in JSON at position 68
【解决方案3】:

这是我的尝试


let sample = {"href":"about:blank#&executeFunction<-finishedStroke&&arguments<-{\"base64DataUrl\":\"data:image/png;base64,iVBORw0KGgoAAErkJggg==\"}&"}

let splitter = sample.href.split("<-")

console.log(JSON.parse(splitter[2].substring(0, splitter[2].length - 1))["base64DataUrl"]
)

【讨论】:

  • 这确实有效,与我最初的尝试类似。谢谢!
猜你喜欢
  • 2014-01-04
  • 1970-01-01
  • 2022-01-20
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多