2010-07-28 4 views
1

Использование Facebook API поиска, я получил ответ, как:Regex изменить порядок атрибутов в строке 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, первая переменная не всегда "created_time". Мне нужно, чтобы изменить это положение type атрибут из-за DataContractJsonSerializer requirement for polymorphism:

Тип Подсказка Позиция в JSON объектов Обратите внимание, что тип намек должен появиться первый в представлении JSON. Это единственный случай, когда порядок пар ключ/значение важен для обработки JSON.

Результат должен быть:

"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" 
    }, 

ответ

1

Для меня, следующие работы:

Поиск по

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

и заменяющие с

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

Это ищет открытую скобу, захватывает все до первой записи type (при отсутствии совпадения, если блок не содержит одного), сохраняет свое значение и заменяет его в начале содержимого блока.

Вложенные блоки не поддерживаются (не знаю, могут ли они возникнуть).

В C#:

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

Для более сложных сценариев, это не работает. Я отказался от этого подхода, но спасибо за ваше время! –

Смежные вопросы