javascript parse在我的字符串上返回undefined

56lgkhnf  于 2023-04-04  发布在  Java
关注(0)|答案(5)|浏览(127)

我有一个从服务器返回的字符串,我想把它解析成一个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中的男性、女性和品牌对象。

t5zmwmid

t5zmwmid1#

要解析的正确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, '"'))
jjhzyzn0

jjhzyzn02#

你的字符串有问题,我认为那些额外的引号是无用的。JSON解析器认为你向他提供了一个字符串“{“female”:16、“品牌”:75,“男”: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)
wgxvkvu9

wgxvkvu93#

您的JSON字符串格式无效。在JSON中,键必须是用双引号而不是单引号写的字符串。例如{“male”: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)
dtcbnfnu

dtcbnfnu4#

在第二行中,像这样解析

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)
f2uvfpb9

f2uvfpb95#

我可以通过使用以下命令来解决这个问题:

dataJson  = JSON.parse(decodeURI(stringToParse));

以下是它参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI

相关问题