-2

От телеграфа получаю ответ в виде JSON

{"ok":true,"result":{"path":"Test-manager-12-30","url":"https://telegra.ph/Test-manager-12-30","title":"Test manager","description":"You idiot\nYou Idiot\nYou idiot\nYou idiot","author_name":"vasa petyx","content":[{"tag":"p","children":["You idiot"]},{"tag":"p","children":[{"tag":"strong","children":["You Idiot"]}]},{"tag":"h3","attrs":{"id":"You-idiot"},"children":["You idiot"]},{"tag":"h4","attrs":{"id":"You-idiot"},"children":["You idiot"]},{"tag":"blockquote","children":["You idiot"]}],"views":1}}

Из этой строки нужно извлечь

{"tag":"p","children":["You idiot"]},{"tag":"p","children":[{"tag":"strong","children":["You Idiot"]}]},{"tag":"h3","attrs":{"id":"You-idiot"},"children":["You idiot"]},{"tag":"h4","attrs":{"id":"You-idiot"},"children":["You idiot"]},{"tag":"blockquote","children":["You idiot"]}

В виде строки. Была идея разбить строку на 2 массива с помощью Split, но он на вход принимает только 1 символ. Вариант с "просто распарсить JSON" не подходит. Т.к мне нужен именно кусок из ответа сервера. Сейчас код выглядит вот так `var temp = JsonConvert.DeserializeObject(answer);

        Content[] content = temp.result.content;

        for (int i = 0; i < content.Length; i++)
        {
            richTextBox1.AppendText("{\"tag\":\"" + content[i].tag.ToString() + "\",\"children\": [\"");
            for (int a = 0; a < content[i].children.Length; a++)
            {
                richTextBox1.AppendText(content[i].children[a].ToString());
            }

            richTextBox1.AppendText("\"]},");
        }`

Но он не правильно работает

загрузил json на сайт, чтоб было наглядно видно о чём я говорю jsoneditoronline.org/?id=0ce659dc203943d7a8fb1657aca64624 введите сюда описание изображения

Men
  • 135
  • Сторонитесь таких задач, где требуется идти в обход рекомендованных инструментов. Вам зачем-то понадобился именно кусок json'а, а не парсинг json? Если это внутри ваших систем - переходите к парсингу json, если это внешние системы -- используйте более современные. – A K Dec 30 '18 at 09:44
  • 2
  • "Вариант с "просто распарсить JSON" не подходит. Т.к мне нужен именно кусок из ответа сервера." Почему бы на распарсить ответ полностью, а потом не использовать только его часть? – aa_talanin Dec 30 '18 at 09:44
  • после того, как я распарсил json у меня есть Content[] внутри которого ещё несколько Content[] вперемешку с обычными строками. в этом вся проблема Поэтому я и хотел поступить проще , не распарсиваю JSOn совсем – Men Dec 30 '18 at 09:46
  • И зачем в итоге вам такой геморой? Content не чем не отличается от остальных данных. Создаете грамотную структуру классов и работаете как надо. Не изобретайте велосипед! – EvgeniyZ Dec 30 '18 at 09:57
  • я не знаю как это сделать, с json в C# я работаю первый раз. – Men Dec 30 '18 at 09:59
  • Я вам ссылку выше дал, смотрели? А пробовали? Предположу, что нет... – EvgeniyZ Dec 30 '18 at 10:01
  • смотрел, ещё вчера. тот сайт генерирует public List content { get; set; } , а что с этим дальше делать я без понятия. Делаю так, List content = temp.result.content; ,а что с этим дальше делать? – Men Dec 30 '18 at 10:03
  • Ты сделай классы с интерфейсом взаимодействия как в данных json. А потом из Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString); получи то что тебе нужно. Такой подход лучше, по-моему. И структура данных будет – aquaprogit Dec 30 '18 at 11:10
  • 1
    Please don't make more work for other people by vandalizing your posts. By posting on Stack Overflow, you've granted a non-revocable right, under the CC BY-SA 3.0 license for SO to distribute that content. By SO policy, any vandalism will be reverted. If you want to know more about deleting a post, please read more at How does deleting work? – iBooot Mar 10 '19 at 13:01

1 Answers1

2
static void Main(string[] args)
    {
        var json = "{'ok':true,'result':{'path':'Test - manager - 12 - 30'," +
            "'url':'https://telegra.ph/Test-manager-12-30','title':'Test manager'," +
            "'description':'You idiot\nYou Idiot\nYou idiot\nYou idiot','author_name':'vasa petyx'," +
            "'content':[{'tag':'p','children':['You idiot']}," +
            "{'tag':'p','children':[{'tag':'strong','children':['You Idiot']}]}," +
            "{'tag':'h3','attrs':{'id':'You-idiot'},'children':['You idiot']}," +
            "{'tag':'h4','attrs':{'id':'You-idiot'},'children':['You idiot']}," +
            "{'tag':'blockquote','children':['You idiot']}],'views':1}}";

        JObject data = JObject.Parse(json);

        //вроде то, что вы хотели получить
        var content = data["result"]["content"].ToString(); 
    }

А вообще курим доки здесь

Bulson
  • 9,411