2013-01-16 86 views
0

我只想複製JSON文件。 目前我正在使用NsJSON來閱讀JSON文件。 這是我的代碼:如何複製JSON文件並在NSIS中保留格式

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

所以你需要空白保持完全一樣嗎? – Anders

+0

是的,我需要保持一切 – ItayD

+0

什麼是問題,換行符或空格/製表符?這仍然是合法的JSON ... – Anders

回答

1

如果要複製文件,請使用CopyFiles命令。

CopyFiles "$DESKTOP\nsis\a.json" "$DESKTOP\nsis\a_new.json" 
0

我不認爲有任何其他的JSON解析器插件,但恕我直言,你的問題是,你需要一個特定的格式,而不只是任何一種有效的JSON的。

如果你不能改變你的JSON解析器我想你可以後期處理的JSON在NSIS(此代碼不能處理所有類型的報價,也沒有逃脫引號!):

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 
0

如果您想保留原始文件格式,你不應該使用/ format開關。 使用它將以「漂亮打印」樣式格式化輸出。