Json 相同的函数返回不同的值,具体取决于是在控制台中创建的还是从模块中创建的

Json 相同的函数返回不同的值,具体取决于是在控制台中创建的还是从模块中创建的,json,function,powershell,module,Json,Function,Powershell,Module,我在PowerShell模块中有一个函数,它返回的值与我在控制台中定义该函数然后运行时返回的值不同 我试图替换JSON变量中的尾随逗号(否则JSON无效)。 当从控制台声明时,此函数将完美地执行。但一旦进入我的模块,并导入,它就不会 以下是函数: 函数格式化某物{ $myJSON= '{ “命令”:“测试”, “某物”:“其他”, }' $myJSON.Replace(“,`n}”,“`n}”) } 下面是一个在我的编辑器和powershell窗口中显示完全相同代码的示例 我首先加载模块,然

我在PowerShell模块中有一个函数,它返回的值与我在控制台中定义该函数然后运行时返回的值不同

我试图替换JSON变量中的尾随逗号(否则JSON无效)。 当从控制台声明时,此函数将完美地执行。但一旦进入我的模块,并导入,它就不会

以下是函数:

函数格式化某物{
$myJSON=
'{
“命令”:“测试”,
“某物”:“其他”,
}'
$myJSON.Replace(“,`n}”,“`n}”)
}
下面是一个在我的编辑器和powershell窗口中显示完全相同代码的示例

我首先加载模块,然后运行函数。它没有按预期运行。然后,我将相同的功能代码复制并粘贴到控制台中,控制台就可以正常工作了


我想这与新行格式有关。但是我试着将我的替换基于
`r`n
`n
都没有用。

我的直觉告诉我,当它保存在模块中时,保存的文件中有回车符和换行符。因此,您的匹配字符串没有根据完全相同的文本进行测试

切换到正则表达式的替代品可能会使这看起来毫无意义
“,`r?`n\}”
应起作用,因为回车是可选的(由
表示)。然而,你的意思是,任何后跟空格和右大括号的逗号都应该去掉逗号,所以我们就这么做吧

'{
     "command": "test",
     "something": "else",
}' -replace ",\s+}", "`r`n}"
因此,我们替换任何逗号,后跟空格。你可以用lookaheads把它看得更远,但我想保持简单

注意:如果有嵌套的json,这可能会导致外观问题,如果不遵循格式约定,也可能找不到某些问题。e、 g

{
     "command": "test",
     "nested": [{"Test":1234},]
     "something": "else",}
这完全有助于理解为什么你所做的事情是这样的(当然,假设我是对的)。

这是否有效:

Function Format-Something {
    $myJSON =
'{
    "command": "test",
    "something": "else",
}'
    $myJSON.Replace(",$([Environment]::NewLine)}","$([Environment]::NewLine)}")
}
而且更健壮一点:

[RegEx]::Replace($myJSON, "\s*,\s*$([Environment]::NewLine)\s*}", "$([Environment]::NewLine)}", [System.Text.RegularExpressions.RegexOptions]::Multiline)

有趣的是,这会产生相反的效果。它可以在模块内完美地工作(最好是这样),但在从CLI声明时不再工作。在决定将哪一个标记为答案之前,我将检查另一个解决方案是否对这两个问题都有效。不管怎样,谢谢!!谢谢这在模块和CLI中都起作用。它也很简单。作为答案的标记。