10
votes

Comment naviguer dans JSON imbriquée

J'ai nié objet JSON comme

{"baseball": 
            {"mlb": 
                   {"regular": 
                             {"_events": [{"start_time": "2011-07-31 17:35", "lines":
[{"comment": "", "coeff": "2.35", "title": "2", "old_coeff": "2.35", "is_main": true}, 
{"comment": "", "coeff": "1.59", "title": "2", "old_coeff": "1.59", "is_main": true}, 
{"comment": "", "coeff": "1.59", "title": "2", "old_coeff": "1.59", "is_main": true}, 
{"comment": "", "coeff": "2.35", "title": "2", "old_coeff": "2.35", "is_main": true}], 
"members": ["atlanta", "florida"]
                                 }
                                  ]
                                   }}}}


3 commentaires

J'ai peur que ce soit un bon exemple de quand utiliser XML au lieu de JSON, car vous pouvez utiliser XPath pour des choses comme ça.


@Gabi purcaru c'est JSON !!! Essayez de le vérifier chez JSONLINT.COM et vous obtenez upvote pour cela, WOW!


@Bakudan Ce n'était pas avant que l'Op l'a modifiée.


3 Réponses :


15
votes

Si la structure est connue:

En supposant que vous avez ci-dessus dans une chaîne appelée entrée (et que le JSON est valide): P>

// find the _events key
var tmp = input.substr(input.indexOf("_events"))
// grab the maximum array contents.
tmp = tmp.substring( tmp.indexOf( "[" ), tmp.indexOf( "]" ) + 1 );
// now we have to search the array
var len = tmp.length;
var count = 0;
for( var i = 0; i < len; i++ )
{
    var chr = tmp.charAt(i)
    // every time an array opens, increment
    if( chr == '[' ) count++;
    // every time one closes decrement
    else if( chr == ']' ) count--;
    // if all arrays are closed, you have a complete set
    if( count == 0 ) break;
}
var events = JSON.parse( tmp.substr( 0, i + 1 ) );


1 commentaires

"Mais je ne sais pas ce qui sera dans les cellules avant _Events et comment ils le feront." Et comment je peux utiliser la réponse?



4
votes

La chose la plus facile à faire dans cette situation, je trouve, est d'aller à Jsfiddle , coller dans votre JSON comme variable: xxx

puis à l'aide de chrome, "Vue" -> "Developer" -> "Console JavaScript" Commencez à expérimenter avec quelle est la structure de données afin de construire votre Fonction d'analyse.

puis commencer à expérimenter avec la structure. Par exemple. xxx

ou si vous allumez jQuery: xxx

Si vous avez des difficultés en cours de chargement dans ce JSON Dans une variable, vous aurez besoin de json.parse une chaîne récupérée via un appel AJAX que je soupçonne.


1 commentaires

Le problème est que je ne sais pas quelle sera la structure, je dois juste aller à la partition _events de manière récursive, puis analyser les matrices de données sont déjà. Et donc, je ne sais pas comment je peux faire de la récursion pour cette tâche =)



15
votes
recursiveGetProperty(yourObject, '_events', function(obj) {
    // do something with it.
});

2 commentaires

J'ai ajouté des raccourcis clavier pour obtenir l'inspecteur Web sur Mac.


Si j'envoie ' membres ' comme argument, il est indiqué la taille maximale de la pile dépassée .