2012-12-17 9 views
14

Witam Tworzę przy użyciu Javascript tablicę obiektu z kluczem i wartością za pomocą następującego kodu.Problem z JSON.stringify dodanie dodatkowych i "" do mojego obiektu Json

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

W rezultacie mam am tablicę obiektu takiego:

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

gdy próbuję stringify go i przesłać że JSON w poście mam źle sformatowaną JSON z \ i "w miejscach, które nie chcę tak, gdy próbuję desirales że JSON jako JObject na kodzie z C# mam kłopoty. jak mogę stworzyć czystą JSON pomocą stringify

var jObject = JSON.stringify(ValuesArray); 

Moje JSON teraz co jest źle jest:

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

chciałbym mieć obiekt JSON jak ten

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

bez cudzysłowów wokół [] i charakteru \

Każdy dobry pomysł, aby go rozwiązać.

Dziękuję

Więcej szczegółów tego, jak Ja was posyłam JSON do mojego API to jak Ja was posyłam JSON do mojego Web API:

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

i to jak ja jej otrzymaniu w moim kontrolera API

... // pOST API/datavalues ​​/ 5

publiczny ciąg post (int id, wartość JObject) { var temp = wartość;

...

Odpowiedz

14

Wygląda na to stawiają ciąg jako wartość w mapie. Trzeba zrobić coś takiego:

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

Co się dzieje jest jesteś podwójnie json kodowania swoją tablicę wartości - pamiętać, że „nieważne” wartość JSON jest faktycznie ciągiem JSON zamiast tablicy, że chcesz.

EDIT Wygląda na to zapisują w ciągi JSON map do tablicy, a następnie stringifying że. Oto jsfiddle które powinny pomóc Ci to, czego szukasz - http://jsfiddle.net/4G5nF/

w swoim wniosku postu, spróbuj tego

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

zanotować zmianę danych atrybutu. To jest wartość, która jest automatycznie JSONified dla ciebie.

+0

Dzięki SB, ale nie działał on tworzyć ten JSON { "{\" JObject \ ":": { "{\" key \ ": \" 20 \ ", \" value \ ": \" ddd \ "}, {\" key \ ": \" 21 \ ", \" value \ ": \" 4,5,13,14,15, \ "}]}": "" } } Nadal mam znaki \ i nie poprawny JSON sformatowany do deserializacji w moim Web API – Devsined

+0

Dziękuję, że działa :) – Devsined

+0

Ciekawe, że teraz mam czysty JSON, ale z dużą ilością spacji i powrót do linii – Devsined

8

Może to być stara biblioteka prototype. Jak usunąć go, bug zniknął

+0

Jest to powiązane: 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}"