UWSCでjson その2

前回は単にjsonを読みたいだけだったのでわりと適当でしたが、jsonいじった後ファイルに書きだしたりしたいよね、stringify出来たらいいね、でもくっそ面倒!ってことでもうjson2使うことにしたというお話

fid = fopen("json2.js")
json2 = fget(fid, F_ALLTEXT)
fclose(fid)

sc = CreateOleObj("ScriptControl")
with sc
    .Language = "JScript"
    .ExecuteStatement(json2)
    .ExecuteStatement("Array.prototype.Get = function(i) { return this[i]; }")
    .ExecuteStatement("Array.prototype.Set = function(i, value) { this[i] = value; }")
    .AddCode("function JsonParse(str){ return JSON.parse(str); }")
    .AddCode("function JsonStringify(obj, indent){ return JSON.stringify(obj, null, indent); }")


    jsonObject = .Run("JsonParse", jsonString)
    print jsonObject.test.a
    print jsonObject.test.b.Get(0)
    print 
    jsonObject.test.a = "12345"
    jsonObject.test.b.Set(1, "uwsc")
    stringifiedJson = .Run("JsonStringify", jsonObject, 4)
    stringifiedJson = replace(stringifiedJson, chr(10), "<#CR>")
    print stringifiedJson
endwith

textblock jsonString
{
    "test":{
        "a":"abcde",
        "b":["111111", "222222"]
    }
}
endtextblock

配列へのアクセスはしゅんさんのprototype弄っちゃう案で解決

わざわざメソッドをAddCodeしてるのは
・Eval() だとオブジェクト渡せない
・AddObject() すんのもめんどくさい
・Run() なら引数でオブジェクト渡せる!
からです

余談ですがSleipnirってばまだ結構iniファイル使ってるんですけどね、値にjson突っ込んでるのを見ていいなって思ったので真似しようと思ってます
そう言う時に役に立つんだよこれ
きっと

え、jsonObject.test.c を追加したい、ですって
うんまぁこのままじゃ出来ないけどうまいことやれば出来ますよ
js側でなんとかします

広告

UWSCでjson その2」への2件のフィードバック

  1. 書くまでもない気がしますが、
    .AddCode(“function Set(obj, name, val){ obj[name] = val; }”)
    .Run(“Set”, jsonObject.test, “c”, 1123)
    とかどうでしょう。Runメソッドならオブジェクトも渡せますし。

  2. Module化して実際に使ってるものだとjs側でObjectにメソッド足しています
    この記事書き終える直前に見直してたら「あ、ないな」って気付いたんですが、ちょっとめんどくなってそのままに
    足りそうで足りてないちょっと足りて…ないよねやっぱ、みたいな記事が多いのでこれもそれにならってるということで、芸風芸風!

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中