2016-08-01 2 views
-2

Я имею строку, которая может выглядеть следующим образом:Поиск строки в скобках

{ 
    "acl_gent": { 
     "cluster": [], 
     "indices": [{ 
      "names": ["am*"], 
      "privileges": ["read", "view_index_metadata"], 
      "query": "{\"match\": {\"ACL\": \"acl_gent\"}}" 
     }], 
     "run_as": [] 
    }, 
    "acl_luik": { 
     "cluster": [], 
     "indices": [{ 
      "names": ["am*"], 
      "privileges": ["read", "view_index_metadata"], 
      "query": "{\"match\": {\"ACL\": \"acl_luik\"}}" 
     }], 
     "run_as": [] 
    } 
} 

и я хотел бы разделить его на 2-х строк, содержащих 1 acl_gent и один conaining acl_luik

строка выше, может содержать более 2 списки доступа (и я НЕ знаю, что имя будет)

поэтому я овка d удаление первого и последнего bracketes:

input = input.Substring(1, input.Length - 2);

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

это было ближе всего я получил

private int closer(string input) { 
    var i = input.IndexOf('}'); 
    Console.WriteLine(string.Format("[DEBUG] Checking: {0}", input.Substring(0, i).Contains('{'))); 
    if (input.Substring(0, i).Contains('{')) { 
     return i + closer(input.Substring(i)) + 2; 
    } 

    return i; 
} 
+0

Как насчет того, чтобы вы правильно разобрали его? (Я имею в виду, используя синтаксический анализатор JSON) – zerkms

+0

Это JSON, и с ним следует обращаться с использованием встроенных функций C# для массивов JSON. – Samuel

+0

Этот тип обозначений называется JSON. Я думаю, ваше ключевое слово. Поиск в google с помощью этого запроса: 'Как я могу разобрать строку JSON в C#'. Думаю, ты найдешь свой ответ. –

ответ

1

То, что вы есть JSON строка, общий ответ от веб-сервиса, и есть множество библиотек для разбора JSON, наиболее распространенными из которых JSON.NET , При этом вы могли бы сделать что-то вроде

JObject myJsonObject = JObject.Parse(myResponse)

и получить ваши строки их имена ключей, такие как

JObject aclString = myJsonObject["acl_luik"];

Есть много ресурсов онлайн для разбора JSON строки, если вы хотите подробнее.

+0

Не удается разобрать данные – Kiwi

1

У вас есть 2 варианта здесь:

1) Parse, как JSON и получить первые 2 объекта, это лучше один.

2) Разбираем с использованием стека в виде строки лексем, чтобы получить то, что вы хотите, как это: - Удалите первый и последний {} - Используя стек, добавьте все {вам найти, и как только вы найдете} удалить первый {в стеке. - После того, как стек пуст, вы получите 1 полный объект там, сохраните пробелы во время работы, и это будет легко подстроить с начала и конца.

1

Недавно я столкнулся с той же проблемой. Мое решение состояло в десериализации строки для json-объекта (в моем случае JObject с использованием Json.net), а затем доступа к отдельным членам и их сериализации для разделения строк.

using Newtonsoft.Json.Linq; 

public void MakeStrings(string json) 
{ 
    var jobject = JsonConvert.DeserializeObject<JObject>(json); 
    string acl_gent = JsonConvert.SerializeObject(jobject["acl_gent"]); 
    string acl_luik = JsonConvert.SerializeObject(jobject["acl_luik"]); 
} 
+0

Выглядит хорошо, но не работает для строки ввода – Kiwi

+0

Хорошо, это работает для меня.Убедитесь, что строка имеет правильные escape-последовательности, прежде чем использовать ее в качестве входных данных. –

+0

Действительно, это было плохо: p – Kiwi

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