私は、次のC#のメソッドを持っています。JSON文字列から配列を解析するには?
[HttpPost]
public JsonResult GetDateBasedRegex(string date)
{
string[] arr = CommonMethods.GetDateBasedRegex(date);
JsonResult retVal = Json(JsonConvert.SerializeObject(retVal));
return retVal;
}
arr
には、次のものが含まれています
そしてこの値が含まれています
C#メソッドが呼び出されていることこのJSによって:
var date = $('#myDateField').val();
AjaxRequest(date, 'html', 'post', '/Common/GetDateBasedRegex', 'application/json;', function (response)
{
var result = JSON.parse(response);
}
);
私はブレークポイントを設定し、response
とresult
の両方のための時計を追加しました:それは、引用符をエスケープするが、そうでない場合、彼らは同じ値だから
response
は少し長いです。
両方の変数は単一の文字列です。この値をどのように解析して配列にすることができますか? 最も関連性の高いものがJavascript how to parse JSON arrayと思われますが、選択された回答が示唆していることはすでに行っています。
私はJSフィドルを作成しようとしました:http://jsfiddle.net/zc2o6v52/しかし、引用符がデバッガによって追加されたため、それを動作させるために値を微調整する必要がありました。変数csharpJsonSerializedString
またはresult
を使用するとループは機能しますが、response
を使用すると、コンソールで「Uncaught SyntaxError:Unexpected string」エラーが発生します。
私は間違っていますか?どのようにJSON文字列から配列を解析しますか?
EDIT
C#retval
の値:
"[\"^[0-9]{9}[A-Z0-9]{0,3}$\",\"^[A-Z]{1,3}([0-9]{6}|[0-9]{9})$\"]"
response
JSの値:
""[\"^[0-9]{9}[A-Z0-9]{0,3}$\",\"^[A-Z]{1,3}([0-9]{6}|[0-9]{9})$\"]""
JS result
の値:
"["^[0-9]{9}[A-Z0-9]{0,3}$","^[A-Z]{1,3}([0-9]{6}|[0-9]{9})$"]"
これらをすべて右クリック - >値をコピーすることで取得します。したがって、それらは引用符の「ラッピング」セットを含むため、文字列にします。
C#は、JS配列をどのように定義するかのように形成されているようです。しかし、response
のような余分な引用符で囲まれているようだ?
また、私のJSを変更してvar result = ['',''];
をajax呼び出しの外に定義してから、その値をJSON.parse()
に更新しようとしましたが、その後も1つの文字列のままです。これはPOSTリクエスト
"[\"^[0-9]{9}[A-Z0-9]{0,3}$\",\"^[A-Z]{1,3}([0-9]{6}|[0-9]{9})$\"]"
これは何もJSONではありませんので、JSON.parseは働くことができない上、あなたのAPIが返す正確な値であると仮定すると、
正確なjsonをテキストとして送信し、イメージとして送信することはできませんか?あなたのjsfiddle結果では、コンマで区切られた2つの文字列があり、文字列変数にそれを代入しようとします。 – petul
@petul完了、申し訳ありません。 – sab669
あなたのapiエンドポイントにヒットし、body-> raw値をコピーしますか?または、クロムネットワークのタブで生の応答のボディ?これまでのところ有効ではないようです。RFC 4627 JSON – petul