web-dev-qa-db-fra.com

Problème avec JSON.stringify ajoutant un \ et "" supplémentaire à mon objet Json

Salut, je crée en utilisant Javascript un tableau d'objets avec une clé et une valeur en utilisant le code suivant.

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

En conséquence, j'ai un tableau d'objets comme celui-ci:

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

lorsque j'essaie de le stringifier et d'envoyer ce JSON dans un message, j'ai un JSON formaté incorrect avec\et "dans des endroits que je ne veux pas, donc quand j'essaie de désirer ce JSON en tant que JObject sur codebehind avec C #, j'ai des problèmes Comment puis-je créer un JSON propre en utilisant le stringify

var jObject = JSON.stringify(ValuesArray);

Mon JSON qui est faux maintenant est:

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

Je voudrais avoir un objet JSON comme celui-ci

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

sans les guillemets autour du [] et le caractère \

Toute bonne idée pour le résoudre.

Je vous remercie

Plus de détails sur la façon dont j'envoie le JSON à mon API, voici comment j'envoie le JSON sur mon API Web:

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

et voici comment je le reçois dans mon contrôleur API

...
  // POST api/datavalues/5


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

...
25
Devsined

Il semble que vous placiez une chaîne comme valeur dans votre carte. Vous devriez faire quelque chose comme:

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

Ce qui se passe, c'est que vous codez json en double votre tableau de valeurs - notez que votre valeur JSON "invalide" est en fait une chaîne JSON plutôt que le tableau que vous voulez.

[~ # ~] modifier [~ # ~] Il semble que vous colliez des chaînes de cartes JSON dans un tableau, puis que vous le renforçiez. Voici un jsfiddle qui devrait vous aider à obtenir ce que vous cherchez - http://jsfiddle.net/4G5nF/

Dans votre demande de publication, essayez ceci

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

Notez la modification de l'attribut de données. C'est une valeur qui est automatiquement JSONified pour vous.

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

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

10
sammy

Il se peut que vous ayez une ancienne bibliothèque prototype. Au fur et à mesure que je le supprime, le bug a disparu

10
Thibaut