我只想复制一个JSON文件。 目前我正在使用NsJSON来读取JSON文件。 这是我的代码:
nsJSON::Set /file $DESKTOP\nsis\a.json
nsJSON::Serialize /format /file $DESKTOP\nsis\a_new.json
问题是:
"obj": [ "a", "b", "c" ]
变为:
"obj": [
"a",
"b",
"c"
]
我必须将json内容保留为原始文件格式。 我如何用NsJson做到这一点? 如果没有办法,你能推荐一个可以做到这一点的不同JSON解析器吗?
答案 0 :(得分:1)
如果要复制文件,请使用CopyFiles命令。
CopyFiles "$DESKTOP\nsis\a.json" "$DESKTOP\nsis\a_new.json"
答案 1 :(得分:0)
我认为没有任何其他JSON解析器插件,但恕我直言,您的问题是您需要特定的格式,而不仅仅是任何类型的有效JSON。
如果您无法更改JSON解析器,我猜您可以在NSIS中对JSON进行后处理(此代码不处理所有类型的引号也不会转义引号!):
Function PrettyOnelineJSON
Exch $0
Push $1
Push $2
Push $3
Push $4
StrCpy $1 "" ; In quote?
StrCpy $2 "" ; Prev. char.
StrCpy $3 "" ; Pos.
loop:
StrCpy $4 $0 1 $3
StrCmp $4 "" done
IntOp $3 $3 + 1
StrCmp $4 " " 0 +2
StrCmp $4 $2 eatone ; Was this and the previous character a space?
StrCpy $2 $4
StrCmp $4 "$\n" eatone
StrCmp $4 "$\r" eatone
StrCmp $4 '"' 0 loop
StrCmp $4 $1 +3
StrCpy $1 $4
Goto loop
StrCpy $1 ""
Goto loop
done:
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
Return
eatone:
StrCmp $1 "" 0 loop ; In a quoted string?
StrCpy $4 $0 "" $3
IntOp $3 $3 - 1
StrCpy $0 $0 $3
StrCpy $0 $0$4
Goto loop
FunctionEnd
Section
StrCpy $0 '"obj": [$\n "a A a A",$\n "b",$\n "c"$\n ]'
MessageBox mb_ok ORG=|$0|
Push $0
Call PrettyOnelineJSON
Pop $0
MessageBox mb_ok NEW=|$0|
SectionEnd
答案 2 :(得分:0)
如果要保留原始文件格式,则不应使用/ format开关。 使用它将格式化输出"漂亮的打印"风格。