わたしの日記だよ

ー生きる厳しさと哀しさを鮮烈に謳うー

jQuery で Unicodeエスケープされた値を含む json を処理する

 

郵便番号を入力して、対応する住所を表示する〜という、よくあるやつを実装しています。

ajax で直に WebAPI を呼んでいるときは問題なかったのですが、該当ページが https なのに

WebAPI は https 非対応で Mixed Content の警告が出てしまうため、間にサーバーを挟んだところ

json の中身が Unicodeエスケープされるようになって、うまく認識できなくなってしまいました。

 

これが、ajax から直接 WebAPI を呼んでいたときの json

{"status":200,"rows":[{"col1":"値1", "col2":"値2"}]}

ajax の部分はこんな感じ。

$.ajax({
    type : 'get',
    url : 'XXXX?postalCode=' + postalCode
})
.then(
    function (data) {
        if (data.status == "200") {
            …略…
        } else {
            // 失敗
        }
    },
    function () {
        // 失敗
    }
);

 

そして、こっちが ajax →サーバー→ WebAPI と、サーバーを経由したときの json

"{\"status\":200,\"rows\":[{\"col1\":\"\\u5024\\uff11\",\"col2\":\"\\u5024\\uff12\"]}"

 色々と、エスケープされまくっている。。。

元のコードのようにただ data.status 〜としても何も取れません。

 

 【結論】オブジェクトに変換すれば大丈夫。

function (data) {
        try {
            data = $.parseJSON(data); // ←これだけ!
        catch (e) {
            // 失敗
        }
        if (data.status == "200") {
            …略…
        } else {
            // 失敗
        }

 Unicodeエスケープをマルチバイト文字に戻して、ダブルクォーテーションをエスケープしてる

バックスラッシュもreplaceで取って〜など、色々試しましたが、結局 parseJSON で

すべて解決しました。

結構ハマってしまった><