2012-12-17 25 views
14

Xin chào Tôi đang tạo bằng cách sử dụng Javascript một mảng đối tượng có khóa và giá trị sử dụng mã sau đây.Vấn đề với JSON.stringify thêm một và "" vào đối tượng Json của tôi

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

Kết quả là tôi phải am mảng các đối tượng như thế này:

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

khi tôi đang cố gắng để stringify nó và gửi rằng JSON trong một bài đăng Tôi gặp một JSON định dạng sai với \ và "ở những nơi mà tôi không muốn như vậy khi tôi cố gắng desirales rằng JSON như một JObject trên codebehind với C# tôi đang gặp khó khăn. làm thế nào tôi có thể tạo ra một JSON sạch bằng cách sử dụng stringify

var jObject = JSON.stringify(ValuesArray); 

JSON của tôi bây giờ đó là sai là:

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

Tôi muốn có một đối tượng JSON như thế này

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

mà không có dấu ngoặc kép quanh [] và nhân vật \

Bất kỳ ý tưởng tốt để giải quyết nó.

Cảm ơn bạn

Xem chi tiết này như thế nào Tôi gửi JSON API của tôi đây là cách tôi đang gửi JSON API Web của tôi:

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); 
       } 
      }) 
     } 

và điều này như thế nào tôi nhận được nó trong điều khiển API của tôi

... // POST api/datavalues ​​/ 5

public string Post (int id, giá trị JObject) { var temp = value;

...

Trả lời

14

Có vẻ như bạn đang đặt một chuỗi làm giá trị trong bản đồ của mình. Bạn nên làm điều gì đó như:

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

gì đang xảy ra là bạn đang json đôi mã hóa các giá trị mảng của bạn - lưu ý rằng "không hợp lệ" JSON giá trị của bạn thực sự là một chuỗi JSON chứ không phải là mảng mà bạn muốn.

EDIT Dường như bạn đang gắn bó vào chuỗi JSON của bản đồ thành một mảng và sau đó xâu chuỗi lại. Dưới đây là một jsfiddle rằng sẽ giúp bạn có được những gì bạn đang tìm kiếm - http://jsfiddle.net/4G5nF/

Trong bài yêu cầu của bạn, hãy thử này

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

Lưu ý sự thay đổi trong các thuộc tính dữ liệu. Đó là một giá trị được tự động được JSON hóa cho bạn.

+0

Cảm ơn SB nhưng nó làm việc nó tạo ra JSON này { "{\" JObject \ ":": { "{\" khóa \ ": \" 20 \ ", \" giá trị \ ": \" ddd \ "}, {\" khóa \ ": \" 21 \ ", \" giá trị \ ": \" 4,5,13,14,15, \ "}]}": "" } } Tôi vẫn còn các ký tự \ và không có định dạng JSON hợp lệ để deserialize trong API Web của tôi – Devsined

+0

Cảm ơn bạn đã hoạt động :) – Devsined

+0

Điều thú vị là bây giờ tôi nhận được JSON rõ ràng nhưng có nhiều không gian và trả lại hàng – Devsined

8

Có thể bạn có thư viện cũ prototype. Như tôi đã loại bỏ nó, lỗi đã biến mất

+0

Điều này có liên quan: http : //stackoverflow.com/questions/710586/json-stringify-array-bizarreness-with-prototype-js –

2
const config = {a: 1, b: 2} 
console.log(JSON.stringify(JSON.stringify(config))) 

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

Các vấn đề liên quan