2009-11-25 4 views
1

J'ai une chaîne json dont une partie doit être extraite et envoyée à un service. Je me demande s'il est possible d'extraire cette partie spécifique de jquery en utilisant des expressions ou toute autre approche?Extrait une section de json dans jquery

l'échantillon JSON j'est

{"hashcode":[], "stringMap":{":id":"50",":question":"My roof"}, ":size":"2", ":type":"java.util.HashMap", ":typeId":"123"} 

et la chaîne que je veux en sortir est

{":id":"50",":question":"My roof"} 

Merci à l'avance.

Merci pour les entrées gars. Je viens de me rendre compte que stringMap peut avoir un nom arbitraire, comme stringMap_0 etc .. puis-je toujours sortir cette partie sans connaître exactement ce nom?

merci encore.

Répondre

2

Soyons clair ici que JSON est juste une notation d'objet Javascript. Donc ce que vous avez est plusieurs objets:

{"hashcode":[], "stringMap":{":id":"50",":question":"My roof"}, ":size":"2", ":type":"java.util.HashMap", ":typeId":"123"} 

Briser ce code plus bas, on trouve les éléments suivants:

"hashcode":[] //an empty array named hashcode 

"stringMap":{":id":"50",":question":"My roof"} //an object named stringMap with two properties, ":id" and ":question" (not sure why the : are there, this is abnormal) 

":size":"2"//a string ":size" set to the string "2" (again, what's with the :?) 

":type":"java.util.HashMap"//a string ":type" set to the string "java.util.HashMap" 

":typeId":"123"//a string ":typeId" set to the string "123" 

Vous pouvez normalement faire référence à l'un de ces objets en utilisant la notation « point » en Javascript. Le tout fonctionne beaucoup comme un Java Enum/Hashmap/ArrayList. Cependant, à cause de ces «:» vous avez tout au long ne va pas travailler. Normalement, cependant, vous pouvez effectuer les opérations suivantes (see POC here):

<script type="text/javascript"> 
var jsonString = '{"hashcode":[], "stringMap":{"id":"50","question":"My roof"}, "size":"2", "type":"java.util.HashMap", "typeId":"123"}'; 
var data = eval("(" + jsonString + ")"); 
alert(data.stringMap.id); 
</script> 

Notez que pour que ce code fonctionne, je devais enlever le « : » d'avant « id » ...

0

que vous obtenez JSON dans la variable nommée foo, vous pouvez simplement écrire foo.stringMap comme ceci:

var foo = {"hashcode":[], "stringMap":{":id":"50",":question":"My roof"}, 
        ":size":"2", ":type":"java.util.HashMap", ":typeId":"123"}; 

alert(foo.stringMap); 

si vous voulez avoir plus d'options pour le manipuler, alors vous pouvez utiliser le plugin JSON de jquery: jquery.json.js

2

jQuery peut faire des requêtes AJAX et recevoir des objets JSON:

$.getJSON(url, params, function(data, textStatus) { 
    // assuming the variable "data" contains your sample json 
    // you can simply get the stringMap property off it: 

    var wantedValue = data.stringMap; 

    // EDIT: After reading the OP's edit, you may need to "find" the property name 
    // Here's how to loop over the object's properties: 

    for(var propertyName in data) { 
     // propertyName is a string, so you can analyze it: 
     // I'll do a regexp test for property names that start with stringMap 
     if(propertyName.match(/^stringMap.*/g)) { 

      // use square brackets to access properties via their string name 
      // if propertyName == "stringMap_0", this is equivalent to data.stringMap_0: 
      wantedValue = data[propertyName]; 
     } 
    } 

    // now if you are targeting Chrome, FF3.5, or IE8 
    // there is a built-in JSON object that can serialize this to a string: 

    var wantedString = JSON.stringify(wantedValue); 

}); 

Si vous avez besoin IE7/6 compatibilité, vous pouvez ajouter l'objet JSON vous , De la JSON.org site.

1

Si vous avez littéralement une « string JSON » comme vous le dites, vous pouvez utiliser une expression régulière pour extraire cette partie de l'objet:

jsonString.match(/"stringMap":({.*}),/)[1]; 
// returns '{":id":"50",":question":"My roof"}' 

Si vous avez un JSON objet et vous voulez une représentation de chaîne de votre sous-objet, vous pouvez directement accéder au membre stringMap, et utiliser une bibliothèque JSON comme json2, à strigify il:

JSON.stringify(jsonObj.stringMap);