【问题标题】:JSON reviver function returns undefined even with returnJSON reviver 函数返回 undefined 即使返回
【发布时间】:2017-09-17 06:01:32
【问题描述】:
function _quotedText(data, config) {
    var pathKeys=config.customKey;  
    console.log(pathKeys);         //prints os_platform
    var inAuth_data=(JSON.parse(JSON.parse(JSON.parse(data["event.fields.custom_fields.inauth_device_data"])), (key, value) => {
        if (key == pathKeys)
        {
            console.log(value);     //prints Android
            return value;           //returns undefined
        }
    }));

    console.log(inAuth_data);       //prints undefined
    return inAuth_data;             //returns undefined
}

我已经阅读了其他类似的问题并尝试了他们在做什么,但我仍然不明白。为什么返回 undefined ?

这里有问题的 JSON 是:

"\"{\\\"deviceInfo\\\":{\\\"permanentId\\\":\\\"23434433-3333-4444-9581-f9cb641d28f5\\\",\\\"publicSigningKey\\\":\\\"MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAzMRW6jXVgqX0QV0EA9h2XnnPvntER5yqPKvD+yLKtxXzBCYMzygEM1nlwBRZhVpNJFvzZ2X+oTLGasdbasjhddasdu0PAWIc1AqKMt6rDEJv4a8bgqqAnXXnvR/QjwtsIq3T59LqivcoB2IPGq7Mof7yRJXKtrEOK2a1b8ixWJ5MBZ06drONhMkzeDTKjenMSM0Hf3BFTlXKCFaZbfShr1OK+wMqWFYrAJsAsufvzwjxKzaZ/RspVuZtfHo0g0z7SxWRBT7+2lKGN0pFyUYebN471n5hZxVMY8Zjfr75QUK1fWIVhzNRc+pH3PhakBeqsnmNncy+XOA7TwIBEQ==\\\"},\\\"objects\\\":[{\\\"perm_id\\\":\\\"READ_PHONE_STATE_DISABLED\\\",\\\"device_pid\\\":\\\"READ_PHONE_STATE_DISABLED\\\",\\\"sdk_version\\\":\\\"Android-MME-7.8.2\\\",\\\"data\\\":{\\\"contact_info_logs\\\":[],\\\"wifi_connection_logs\\\":[{\\\"ip\\\":\\\"111.22.33.44\\\",\\\"ssid\\\":\\\"\\\\\\\"iPhone sdf Gucci\\\\\\\"\\\",\\\"linkspeed\\\":\\\"72\\\",\\\"bssid\\\":\\\"22: 56: 23: 45: 0c: ab\\\",\\\"rssi\\\":\\\"-35\\\",\\\"macaddr\\\":\\\"a4: ss: ea: 17: dg: ss\\\",\\\"networkid\\\":\\\"17\\\"}]}}]}\""

【问题讨论】:

  • 为什么要多次解析相同的数据? (JSON.parse(JSON.parse(JSON.parse(
  • 因为数据被字符串化三次,例如:""\"{\\\"deviceInfo\\\":{\\\"permanentId\\\":\\\"8f408412-6934- 4bf8-9581-............
  • 啊,是三次先生!您不需要多次解析数据。这也会导致不匹配的大括号。尝试删除除一个JSON.parse之外的所有@
  • 试过了,"console.log(value); //prints Android" 现在什么都不打印了。
  • 你能用 JSON 的minimal reproducible example 更新问题吗?

标签: javascript json reviver-function


【解决方案1】:

经过大量的头撞后找到了答案。 但是,似乎正在为 JSON 中的每个对象调用该函数。而在

之后

if (key == pathKeys)

经过检查,它打印了值并返回了值,但是在匹配键之后的 JSON 字符串中仍有对象被覆盖到变量 inAuth_data 上。

因此,我所要做的就是在 reviver 函数之外声明另一个变量,并在条件为真时为其赋值。

function _quotedText(data, config) {
var pathKeys=config.customKey;  
console.log(pathKeys);         //prints os_platform
var data = undefined;
var inAuth_data =(JSON.parse(JSON.parse(JSON.parse(data["event.fields.custom_fields.inauth_device_data"])), (key, value) => {
    if (key == pathKeys)
    {
        console.log(value);     //prints Android
        data = value;           //Assigning value of value to data
    }
  }));

console.log(inAuth_data);       //prints Android
return inAuth_data;             //returns Android

}

感谢@evolutionxbox 与我合作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多