【问题标题】:JSON.parse returning undefined on my stringJSON.parse 在我的字符串上返回 undefined
【发布时间】:2020-07-10 11:46:51
【问题描述】:

我有一个从我的服务器返回的字符串,我想把它解析成一个 JSON 对象,下面是这个字符串和我在做什么:

stringToParse = "\"{'female': 16, 'brand': 75, 'male': 8}\""
dataJson = JSON.parse(stringToParse)
console.log(dataJson)
console.log(dataJson.male)

我将其作为输出:

{'female': 16, 'brand': 75, 'male': 8}
undefined

所以我无法访问 JSON 中的男性、女性和品牌对象。

【问题讨论】:

  • dataJson 是一个字符串
  • 怎么可能,不是JSON.parse返回的是JSON对象吗?

标签: javascript json reactjs jsx


【解决方案1】:

正确解析的json应该是

stringToParse = '{"female": 16, "brand": 75, "male": 8}'

您需要更改服务器上的代码以这种方式返回数据,或者在您的 js 文件中处理它。

此代码有效

let stringToParse = '{"female": 16, "brand": 75, "male": 8}'
dataJson = JSON.parse(stringToParse)
console.log(dataJson)
console.log(dataJson.male)

如果你不能改变原来的stringToParse,那么试试这个以便在js中解析它

let stringToParse = "\"{'female': 16, 'brand': 75, 'male': 8}\""
JSON.parse(stringToParse.replace(/\"/g, '').replace(/'/g, '"'))

【讨论】:

  • 真的很难改变服务器端,你知道我如何在JS中轻松切换到那个吗?
  • 最简单的解决方案是双重解析 JSON.parse(JSON.parse(stringToParse))
  • 用那个更新了我的答案
  • @FahdLyousfi 检查我更新的答案。我认为JSON.parse(stringToParse.replace(/\"/g, '').replace(/'/g, '"')) 会成功
  • Unexpected token ' in JSON at JSON.parse () 的位置 1
【解决方案2】:

你的字符串有问题我认为那些额外的引号没用。 JSON 解析器为他提供字符串 "{"female": 16, "brand": 75, "male": 8}" 并将其解析为字符串,因此您可以看到 console.log 结果{"female": 16, "brand": 75, "male": 8} 但是它不是一个对象,而是一个字符串。去掉多余的引号,它会认为它是一个对象。

stringToParse = '{"female": 16, "brand": 75, "male": 8}'
dataJson = JSON.parse(stringToParse)
console.log(dataJson)
console.log(dataJson.male)

【讨论】:

    【解决方案3】:

    您的 json 字符串格式无效。在 JSON 中,键必须是用双引号而不是单引号编写的字符串。例如{“男性”:16}。尝试阅读此https://www.w3schools.com/js/js_json_syntax.asp。所以下面是正确答案:

    stringToParse = '{"female": 16, "brand": 75, "male": 8}'
    dataJson = JSON.parse(stringToParse)
    console.log(dataJson)
    console.log(dataJson.male)
    

    【讨论】:

      【解决方案4】:

      在你的第二行这样解析

      stringToParse = "\"{'female': 16, 'brand': 75, 'male': 8}\""
      dataJson = JSON.parse(stringToParse.replace(/\"/g, '').replace(/'/g, '"'))
      

      stringToParse = "\"{'female': 16, 'brand': 75, 'male': 8}\""
      dataJson = JSON.parse(stringToParse.replace(/\"/g, '').replace(/'/g, '"'))
      console.log(dataJson)
      console.log(dataJson.male)

      【讨论】:

        猜你喜欢
        • 2020-08-07
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 2017-07-18
        • 2011-09-20
        • 2023-03-10
        • 2018-07-26
        • 1970-01-01
        相关资源
        最近更新 更多