37

こんにちは私はJavascriptを使用して、次のコードを使用してキーと値を持つオブジェクトの配列を作成しています。

ValuesArray.push({ key: $(this).attr('someattribute'), value: $(this).val() });

その結果、私は次のようなオブジェクトの配列を持っています:

key:29; value: 'Country'
Key:12; value: '4,3,5'

それを文字列化して投稿でそのJSONを送信しようとすると、\と "が間違った形式のJSONになります。そのため、C#のコードビハインドでそのJSONをJObjectとして希望する場合、問題が発生します。 .stringifyを使用してクリーンなJSONを作成するにはどうすればよいですか?

var jObject = JSON.stringify(ValuesArray);

間違っている私のJSONは次のとおりです。

{
  "JObject": "[{\"key\":\"29\",\"value\":\"Country\"},  {\"key\":\"30\",\"value\":\"4,3,5\"}]"
}

このようなJSONオブジェクトが欲しいのですが

{
  "JObject": [{"key":"29","value":"Country"},{"key":"30","value":"4,3,5"}]
}

[]と文字の周りの引用符なし\

それを解決するための良いアイデア。

ありがとうございました

JSONをAPIに送信する方法の詳細これは、JSONをWebAPIに送信する方法です。

function PostAPIRequest(address) {

           var jObject = JSON.stringify(ValuesArray);

           var responseJson = null;
           $.ajax({
               url: address,
               type: 'POST',
               dataType: 'json',
               data: { JObject: jObject },
               success: function (data) {
                   responseJson = data
                   ProcessDataResponse(responseJson);
                   //TODO: REFRESH THE DATA GRID
               },
               error: function (xhr, ajaxOptions, thrownError) {
                   //TODO redirect to the error page and send error email there.
                   alert(xhr.status);
                   alert(thrownError);
               }
           })
       }

これがAPIコントローラーでどのように受信されているか

...
  // POST api/datavalues/5


   public string Post(int id, JObject  value)
    {
        var temp = value;

...
4

3 に答える 3

24

マップの値として文字列を配置しているようです。次のようなことをする必要があります。

var objMap = {"JObject" : ValuesArray}; var json = JSON.stringify(objMap)

何が起こっているのかというと、values配列をダブルjsonでエンコードしているということです。「無効な」JSON値は、実際には必要な配列ではなく、JSON文字列であることに注意してください。

編集 マップのJSON文字列を配列に貼り付けてから文字列化しているようです。これがあなたが探しているものを手に入れるのを助けるはずのjsfiddleです-http: //jsfiddle.net/4G5nF/

投稿リクエストで、これを試してください

var jObject = {"JObject" : ValuesArray};
$.ajax({   url: address,
           type: 'POST',
           dataType: 'json',
           data: jObject,
           success: function (data)  { .. }});

data属性の変更に注意してください。これは、自動的にJSON化される値です。

于 2012-12-17T15:12:33.297 に答える
18
const config = {a: 1, b: 2}
console.log(JSON.stringify(JSON.stringify(config)))

"{\" a \ ":1、\" b \ ":2}"

于 2017-10-25T03:49:13.300 に答える
12

prototype古い図書館があるかもしれません。削除するとバグがなくなりました

于 2013-12-02T15:20:38.547 に答える