2010-07-28 5 views
1

utilisant Facebook API de recherche, je me suis une réponse comme:Regex pour modifier l'ordre des attributs dans une chaîne JSON?

"data" : [ 
    { 
     "created_time" : "2010-07-24T19:47:31+0000", 
     "description" : "...", 
     "icon" : "...", 
     "id" : "1", 
     "link" : "...", 
     "name" : "...", 
     "type" : "link", 
     "updated_time" : "2010-07-24T19:47:31+0000" 
    }, 
    { 
     "created_time" : "2010-07-24T14:57:51+0000", 
     "id" : "2", 
     "message" : "...", 
     "type" : "status", 
     "updated_time" : "2010-07-24T14:57:51+0000" 
    }, 

BTW, première variable est pas toujours "created_time". Je dois changer cette type position attribut en raison d'un DataContractJsonSerializer requirement for polymorphism:

Type de fonction Hint JSON objets Notez que l'indication de type doit apparaître d'abord dans la représentation JSON. C'est le seul cas où l'ordre des paires clé/valeur est important dans le traitement JSON.

Résultat doit être:

"data" : [ 
    { 
     "__type" : "link:#Facebook", 
     "created_time" : "2010-07-24T19:47:31+0000", 
     "description" : "...", 
     "icon" : "...", 
     "id" : "1", 
     "link" : "...", 
     "name" : "...", 
     "updated_time" : "2010-07-24T19:47:31+0000" 
    }, 
    { 
     "__type" : "status:#Facebook", 
     "created_time" : "2010-07-24T14:57:51+0000", 
     "id" : "2", 
     "message" : "...", 
     "updated_time" : "2010-07-24T14:57:51+0000" 
    }, 

Répondre

1

Pour moi, les oeuvres suivantes:

Recherche pour

\{(\s+)([^}]*?)"type" : "([^"]*)",\s+ 

et les remplacer par

{\1"__type" : "\3:#facebook"\1\2 

Cela recherche une accolade ouvrante, saisit tout jusqu'à la première entrée type (à défaut de correspondance si le bloc n'en contient pas), stocke sa valeur et la remplace au début du contenu du bloc.

Les blocs imbriqués ne sont pas pris en charge (ne sait pas s'ils peuvent se produire).

En C#:

resultString = Regex.Replace(subjectString, @"\{(\s+)([^}]*?)""type"" : ""([^""]*)"",\s+", "{$1\"__type\" : \"$3:#facebook\"$1$2"); 
+0

Pour des scénarios plus complexes, cela ne fonctionne. J'ai abandonné cette approche, mais merci pour votre temps! –

Questions connexes