javascript - 如何解析在javascript中嵌套了转义JSON的JSON?
问题描述
更新:这个 JSON 只是示例之一,我需要读取这些 JSON 文件并将它们传递给接受 JSONObject 的函数。
我有一个这样的 JSON -
{ "log": {
"version": "1.2",
"entries": [
{
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Date",
"value": "Tue, 19 Feb 2019 13:50:34 GMT"
},
{
"name": "CF-RAY",
"value": "4ab934095ceacc4c-ZRH"
},
{
"name": "Content-Encoding",
"value": "gzip"
}
],
"cookies": [],
"content": {
"size": 155,
"mimeType": "application/json",
"compression": 0,
"text": "{\"ip\":\"45.64.195.115\",\"ip_decimal\":759219059,\"country\":\"India\",\"country_eu\":false,\"country_iso\":\"IN\",\"city\":\"nocity\",\"latitude\":98.975,\"longitude\":92.8258}"
},
"redirectURL": "",
"headersSize": 230,
"bodySize": 155,
"_transferSize": 385
},
"cache": {},
"timings": {
"blocked": 6.805000007039867,
"dns": -1,
"ssl": -1,
"connect": -1,
"send": 0.22000000000000064,
"wait": 174.87700000413787,
"receive": 11.549999995622784,
"_blocked_queueing": 0.8590000070398673
},
"serverIPAddress": "100.28.12.103",
"_initiator": {
"type": "other"
},
"_priority": "VeryHigh",
"connection": "509100",
"pageref": "page_2"
}
]
}
}
我正在尝试解析正在使用-
var parsed = JSON.parse(myJson);
这会在这部分引发错误 -"text": "{\"ip\":\"49.64.194.115\",\"ip_decimal\":75
因为它是一个转义的嵌套 JSON。
我该怎么做?我在这里找到了一种方法,但不适用于此问题。
解决方案
您的 json 已经可以用作 javascript 对象
const myJSON = {
"log":{
"version":"1.2",
"entries":[
{
"response":{
"status":200,
"statusText":"OK",
"httpVersion":"HTTP/1.1",
"headers":[
{
"name":"Date",
"value":"Tue, 19 Feb 2019 13:50:34 GMT"
},
{
"name":"CF-RAY",
"value":"4ab934095ceacc4c-ZRH"
},
{
"name":"Content-Encoding",
"value":"gzip"
}
],
"cookies":[
],
"content":{
"size":155,
"mimeType":"application/json",
"compression":0,
"text":"{\"ip\":\"45.64.195.115\",\"ip_decimal\":759219059,\"country\":\"India\",\"country_eu\":false,\"country_iso\":\"IN\",\"city\":\"nocity\",\"latitude\":98.975,\"longitude\":92.8258}"
},
"redirectURL":"",
"headersSize":230,
"bodySize":155,
"_transferSize":385
},
"cache":{
},
"timings":{
"blocked":6.805000007039867,
"dns":-1,
"ssl":-1,
"connect":-1,
"send":0.22000000000000064,
"wait":174.87700000413787,
"receive":11.549999995622784,
"_blocked_queueing":0.8590000070398673
},
"serverIPAddress":"100.28.12.103",
"_initiator":{
"type":"other"
},
"_priority":"VeryHigh",
"connection":"509100",
"pageref":"page_2"
}
]
}
}
如果你想解析 'log.entries.response.content.text' 你可以做这样的事情
if (myJSON.log && myJSON.log.entries && myJSON.log.entries.length > 0) {
for (const element of myJSON.log.entries) {
if (element.response && element.response.content && element.response.content.text) {
try {
element.response.content.text = JSON.parse(element.response.content.text);
} catch (error) {
console.log('do nothing')
}
}
}
}
推荐阅读
- vba - 用逗号分隔多个搜索条件
- java - 具有当前位置的 Android 谷歌地图
- java - 我想从 Postman 发送一个列表(它是一个对象的成员)到 Spring REST API
- python - 使用 try/except 控制流程
- select - 为什么刷新 Options 淘汰 observableArray 时我的 Select 值被取消选择(并且原始值仍然存在)?
- spring-boot - junit 使用 h2 gis 抛出“JDBC 类型的无方言映射:2000”
- c++ - 当我在另一台电脑上使用 frament 着色器时程序崩溃
- laravel - 当用户在 laravel 中提交联系表格时,我的 gmail 帐户中的用户会收到电子邮件
- snowflake-cloud-data-platform - 是否仅支持同一 Snowflake 区域中的帐户之间的数据共享?
- xslt - 使用 xpath 选择平面 xml 的某些字段/子项