【问题标题】:Parsing JSON object with space in key value解析带有键值空格的 JSON 对象
【发布时间】:2019-08-15 22:36:12
【问题描述】:

我正在尝试使用 powershell 执行节点 js 代码。将 JSON 对象作为命令行参数发送给 nodejs 程序进行处理。

//Java Script Code
let command = JSON.parse(process.argv[2].split('\\').join('') || '{}');
console.log(JSON.stringify(command));
console.log(command.bonding_options);

这是 PowerShell 命令:

C:\nodejs\node Parse.js '"{\"bonding_options\":\"mode=802.3ad miimon=100 xmit_hash_policy=layer3+4\"}"'

如果您仔细观察,输入参数有空格,例如“mode=802.3ad miimon”。 '3ad miimon' 之间的空间 原始输入有我们无法避免的空格。如果我发送带有空格值的输入,我会得到以下错误:

{"bonding_options":"mode=802.3ad


SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Object.<anonymous> (C:\Users\kp250041\Desktop\Myfiles\Parse.js:3:20)
at Module._compile (internal/modules/cjs/loader.js:688:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
at startup (internal/bootstrap/node.js:285:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)

如果空格被删除,它会起作用:

{ bonding_options: 'mode=802.3admiimon=100xmit_hash_policy=layer3+4' }
mode=802.3admiimon=100xmit_hash_policy=layer3+4

请告知,在这种情况下如何处理空格。 提前感谢您的帮助。

谢谢 基兰

【问题讨论】:

    标签: javascript node.js json


    【解决方案1】:

    既然你说你不能修改参数,这里有一个hacky解决方案:

    process.argv.splice(0,2)
    let command = JSON.parse(process.argv.join(" ").split('\\').join('') || '{}');
    console.log(JSON.stringify(command));
    var objarr = JSON.parse(JSON.stringify(command));
    console.log(command.bonding_options);
    

    【讨论】:

    • 这行得通!由于我们无法控制输入/参数,所以这个技巧非常有用。感谢您的快速响应。
    【解决方案2】:

    您可以使用正则表达式替换字符串中空格字符的所有实例

    string.replace(/\s/g, '')

    var inputString = "This is a test string"
    console.log(inputString.replace(/\s/g, ''))

    详细解释请看这篇文章:Javascript Regular Expression Remove Spaces

    【讨论】:

      【解决方案3】:

      您发送的代码目前已被大量转义:) 您发送的命令在字符串的开头和结尾都带有单引号和双引号。但是参数已经是一个字符串,所以根本不需要双引号

      所以,我认为你对 nodejs 的命令应该是:

      C:\nodejs\node Parse.js '{"bonding_options":"mode=802.3ad miimon=100 xmit_hash_policy=layer3+4"}'

      并且您不必删除\,因为您当时没有任何(代码被单 ' 包围,因此无需转义双的

      function parseArgs( args, index = 2 ) {
        return JSON.parse(args[index] || '{}').bonding_options;
      }
      
      console.log( parseArgs( ['{\"bonding_options\":\"mode=802.3ad miimon=100 xmit_hash_policy=layer3+4\"}'], 0 ) );
      
      console.log( parseArgs( ['{"bonding_options":"mode=802.3ad miimon=100 xmit_hash_policy=layer3+4"}'], 0 ) );

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-29
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多