2

flotを使用してグラフを作成していますが、jsonでtickSizeを渡すのに問題があります。私はMVCを使用しており、モデルでjsonを渡します。これが私のjavascript関数内でjsonをつかむためのいくつかのコードです:

var json = '<%=Model.Json %>';
var data = jQuery.parseJSON(json);

Jsonがコントローラーを離れる様子は次のとおりです。

{\"GraphData\":[{\"X\":1333929600000,\"Y\":0.0},{\"X\":1333670400000,\"Y\":0.46}],\"Max\":1333324800000,\"Min\":1333929600000,\"TickSize\":\"[1, 'day']\"}

困っているのは「TickSize」です。ご覧のとおり、「[1、'day']」には角かっこが付いています。[]は通常配列を意味するため、解析の問題があると思います。Flotは、この形式のティックサイズを必要としています。TickSizeを取得できるようにJsonを構築するにはどうすればよいですか?

4

3 に答える 3

2

問題は、文字列値の単一引用符です。これは、JSON文字列もそれらでラップしようとしているためです。結果のJavaScriptは(切り捨てられて)次のようになります。

var json = '...,\"TickSize\":\"[1, 'day']\"}';

一重引用符が4カウントになっているため、dayは実際には文字列の一部ではなく、構文エラーが発生します。

ただし、JSONはJavaScript構文から派生しているため、JSONを引用して解析する必要はありません。

var data = <%= Model.Json %>;

文字列表現が必要な場合は、JavaScriptで文字列化することができます。

var json = JSON.stringify(data):

または、文字列サーバー側で一重引用符をエスケープします。

var json = '<%= Model.Json.Replace("'", "\\'") %>';
于 2012-04-09T21:42:52.150 に答える
0

解決策: シングルバックスラッシュ'\'をダブル'\\'バックスラッシュに置き換えます。
改行文字'\n'から'\\n'の場合
ツールチップメッセージで機能します

于 2012-04-19T07:24:10.503 に答える
0

'文字列を。の代わりに囲んでいるためです"。これにより、文字列は最初ので終了します'

最初の行を次のように書き直します

var json = "<%=Model.Json %>";
于 2012-04-09T21:45:02.570 に答える