3

私はRuby1.9.3で実行されているRails3.2アプリを持っており、MongoDBデータベースに保存されているJSONデータを返します。データはmongoに正しく保存されているようです。例:(name属性を見てください):

{ "_id" : ObjectId("4f986cbe4c8086fdc9000002"), "created_at" : ISODate("2012-04-25T21:31:45.474Z"), "updated_at" : ISODate("2012-04-26T22:07:23.901Z"), "creator_id" : ObjectId("4f6b4d3c4c80864381000001"), "updater_id" : null, "name" : "Trädgår'n", "sort" : "tradgarn", "address" : "Nya Allén 11", "coordinates" : [ 11.9764791, 57.7045625 ], "phone" : "46031102080", "url" : "http://www.profilrestauranger.se/tradgarn/", "user_ids" : [ ] }

しかし、このレコードを返すリクエストを発行すると、次のようなものが返されます(ここでname属性を確認してください)。

{"address":"Nya All\u00e9n 11","coordinates":[11.9764791,57.7045625],"created_at":"2012-04-25T23:31:45+02:00","id":"4f986cbe4c8086fdc9000002","name":"Tr\u00e4dg\u00e5r'n","phone":"46031102080","sort":"tradgarn","updated_at":"2012-04-27T00:07:23+02:00","url":"http://www.profilrestauranger.se/tradgarn/"}

興味のある人のための応答ヘッダー:

HTTP/1.1 200 OK
Server: nginx/1.2.0
Date: Thu, 26 Apr 2012 22:41:13 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 909
Connection: keep-alive
Status: 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Max-Age: 1000
Access-Control-Allow-Headers: *,x-requested-with
X-UA-Compatible: IE=Edge
ETag: "d2a95f06bec10d8087c3188280292d3c"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: fdd042568195df279e59affe45bdcd37
X-Runtime: 0.037134

なぜ、どこでエンコーディングが台無しになっているのか理解できないようです。何が得られますか?ヘルプ?:)

4

2 に答える 2

7

問題は確かにJSONUTF-8エンコーディングの1つです。#to_jsonメソッドはUnicode文字をエスケープしています。これは、次のようなもので観察できます。

user.to_json

#  => "{\"created_at\":\"2012-04-19T18:48:01Z\",\"email\":\"tr\\u00e4dg\\u00e5r@example.com\",\"id\":10,\"updated_at\":\"2012-04-27T18:37:10Z\"}"

ただし、解析すると、これは期待どおりに変換されます。ただし、を使用してJSONを生成することは可能です。これを使用JSON.generateして、#as_jsonメソッドを使用できます。また、構築のオプションも使用できます。これはUnicodeをエスケープしません。そのようなことをするために:

JSON.generate(user.as_json)

#  => "{\"created_at\":\"2012-04-19T18:48:01Z\",\"email\":\"trädgår@example.com\",\"id\":10,\"updated_at\":\"2012-04-27T18:37:10Z\"}"
于 2012-04-27T19:20:48.847 に答える
0

私が見ていた問題は宝石にあったことがわかりcolorful_jsonました。私はCLIユーティリティを介してJSONを実行していcjsonましたが、Unicodeを台無しにしていました。私は問題を報告しました、そして、gemの新しいバージョンはこれを修正します。

于 2012-05-03T15:02:04.483 に答える