« ローカル環境だと文字化け!? | トップページ

レガシーASPのJSONパーサー

レガシーASPの環境で、JSONのパースを行う必要が出てきまして。。。

普通にJson文字列を分解して、Dictionary型として入れ込むだけでは
日本語がどうしても文字化けしていまっていて
それがUnicode→Shift-JISの変換が必要だということは分かったけど
一から自分で作るのは面倒だ・・・
そう思ってググったら、やはり作ってくれていた先輩がいらっしゃいましたヽ(´▽`)/


◇umejanのブログ
うひょひょ、ありがたや~ と思っていたのですが、
少しばかり不具合がありましたので修正して使っております。
その1 null の時に、値だけでなくキー項目すらも取れなくなってしまう
 例えばJsonの中で {"jyusho": null} ってのがあったとき、
  Dictionary型のオブジェクトに jyushoが存在していないと怒られてしまうのだ。
 
これを回避するために
→ WordNull() 関数の中で
    Set WordNull = Nothing 
としている個所を
    WordNull = null
に変更。

なので、この関数を呼び出している個所 
getVal()関数の中の
~前略~
   Case Else
      If ch >= "0" And ch <= "9" Then
         isObj = False
         val = number()
      ElseIf ch = "n" Then
         isObj = True
         Set val = WordNull()
      Else
~後略
このあたりの個所を下記のように変更

~前略~
   Case Else
      If ch >= "0" And ch <= "9" Then
         isObj = False
         val = number()
      ElseIf ch = "n" Then
         isObj = False
         val = WordNull()
      Else
~攻略
これで、例えば "jyusho": null のような項目があったとき、
VBScript では 
  IsNull(objJson("jyusho") = False Then
    Exit sub
  End If
のように使えるようになります。


その2 波ダッシュ(~)が化ける
これは Unicode→Shift-JISの変換の時によく引っかかるやつ。

→ fromUnicode()関数に、波ダッシュの時だけの特別処理を追加しました。

元ソース
    Private Function fromUnicode(uffff)
       fromUnicode = ChrW(uffff)
    End Function
↓下記のように、例外的な扱いの条件を追加

    Private Function fromUnicode(uffff)
 '"~"の文字化け回避
        If uffff = 12316 Then
            fromUnicode = "~"
        Else
            fromUnicode = ChrW(uffff)
         End If
    End Function
これで波ダッシュも問題なく表示されるようになりましたo(*^▽^*)o
以上、あとはとっても快適に動いております。

感謝、感謝でございます。

|

« ローカル環境だと文字化け!? | トップページ

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/520403/65370930

この記事へのトラックバック一覧です: レガシーASPのJSONパーサー:

« ローカル環境だと文字化け!? | トップページ