2013-04-18 3 views
0

Предполагая, что у меня есть строка, которая выглядит следующим образом ...Извлечение объекта JSON из сериализованной строки в C#

string s = "{ \"id\": \"1\", \"name\" : \"Test\" } has other text in the same string"; 

Есть ли способ, в C#, чтобы извлечь JSON часть текста, как его собственный «токен» при разделении строки?

Цель очень проста. В строке, содержащей текст и, возможно, объект JSON, я просто хотел попробовать и отделить текст от JSON, чтобы я мог передать его в соответствующий объект. Не требуется никакой десериализации, нет необходимости в проверке, и нет необходимости превращать текст JSON в объект. Я просто хотел вытащить текст.

+0

Вы имеете в виду сделать полный синтаксический анализ, или просто найти немного между фигурными скобками? – Floris

+0

Просто вытащите часть между фигурными скобками. Я не хочу делать какие-либо проверки, я просто хочу отделить JSON от остальной части строки. – Ciel

+0

Как только я его отделил, я могу сделать то, что я хочу, с десериализацией достаточно легко. – Ciel

ответ

2

пыльник код должен делать то, что вы ищете (я тестировал):

string s = "{ \"id\": \"1\", something:{xx:22, yyy: \"3\"}, \"name\" : \"Test\" } has other text in the same string"; 
var regexp = new Regex("([{].+[}])"); 
var match = regexp.Match(s); 
+0

Я думаю, что это именно то, что я пытаюсь сделать, да. Большое вам спасибо, дайте мне минутку, чтобы запустить это через некоторые испытания, и я вернусь к вам. – Ciel

+1

Вам нужно что-то вроде '[^ \] \}' для конца выражения ... Вы не хотите заканчивать на экранированном скользящем скобке – Floris

+0

Это работало безупречно, это было именно то, что я пытался сделать , – Ciel

0

Я не думаю, что для этой цели существует встроенный метод. Но вы можете добиться того, что вы используете Regex.

3

Когда вы имеете дело с JSON, использовать реальный JSon анализатор как Json.net. Regex недостаточно для обработки всех крайних случаев.

Например, предположим, что поле строки содержит [, и вы используете ответ Гарата. Booom.

string s = "{ \"id\": \"1\", \"name\" : \"Test\" }"; 
var anonymousObject = new { id = 0, name = "" }; 
anonymousObject = JsonConvert.DeserializeAnonymousType(s, anonymousObject); 

Console.WriteLine(anonymousObject.name); 

Другие Serializer альтернативы: JavaScriptSerializer, DataContractJsonSerializer .......

+0

почему вы думаете: «[» будет проблемой? Я проверил, что regexp все еще в порядке. Я думаю, его проблема заключалась в том, чтобы извлечь JSON из строки, а затем разобрать его. –

+0

@Garath, прежде чем вдаваться в детали синтаксического анализа json с помощью регулярного выражения, можете ли вы сказать * как ваш код указывает значение, например. xx * – I4V

+1

Я не хочу анализировать его, он попросил экстракции не разбираться –

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