2016-08-30 2 views
-1

У меня есть следующая строка JSon# Json (NewSoft) - получение конкретных элементов

{ 
       'id': '346582587961401930', 
       'form_id': '62455437457962', 
       'ip': '79.123.81.69', 
       'created_at': '2016-08-09 16:09:47', 
       'status': 'ACTIVE', 
       'new': '0', 
       'flag': '0', 
       'updated_at': '2016-08-09 16:10:49', 
       'answers': { 
        '4': { 
         'text': '<p><span style=\'font-size:14pt;\'><strong>Ethical Leaders. Global Changemakers</strong></span></p>', 
         'type': 'control_text' 
        }, 
        '5': { 
         'text': ' ', 
         'type': 'control_textbox', 
         'answer': 'John' 
        }, 
        '6': { 
         'type': 'control_textbox', 
         'text': 'Middle' 
        }, 
        '7': { 
         'text': ' ', 
         'type': 'control_textbox', 
         'answer': 'Smith' 
        }, 
        '8': { 
         'text': 'Address', 
         'type': 'control_address' 
        }, 
        '9': { 
         'text': 'E-mail', 
         'type': 'control_email', 
         'answer': '[email protected]' 
        }, 
        '10': { 
         'text': 'Cell phone', 
         'type': 'control_phone', 
         'answer': { 
         'area': '213', 
         'phone': '3923095' 
         }, 
         'prettyFormat': '(213) 3923095' 
        }, 
        '11': { 
         'type': 'control_textbox', 
         'text': 'Anticipated Start Semester/Year', 
         'answer': '2018 Fall' 
        }, 
        '13': { 
         'type': 'control_textbox', 
         'text': 'Current high school/College', 
         'answer': 'Wood Ranch' 
        }, 
        '14': { 
         'type': 'control_textbox', 
         'text': 'Event name', 
         'answer': 'Testing' 
        }, 
        '15': { 
         'type': 'control_textarea', 
         'text': 'Notes', 
         'answer': 'This is a test' 
        }, 
        '16': { 
         'text': 'Home phone', 
         'type': 'control_phone' 
        }, 
        '12': { 
         'answer': 'Biology and Bioethics (Pre-Med)\r\nUnknown' 
        } 
       } 
       } 

Элемент с номером '' представляют собой вопрос, как идентификатор '4'.

В C# (с использованием Newtonsoft.Json; с использованием Newtonsoft.Json.Linq;) Я ищу способ поиска и извлечения конкретных вопросов на основе идентификатора и для каждого значения свойств get. Если свойства также являются JSon, я хотел бы также получить их.

Например:

Я хотел бы получить значение свойства «ответ» на вопрос ид «5» и «области» и «телефон» под «ответ» на вопрос ид «10» I пробовал разные подходы, но не могли найти последовательный способ, чтобы получить его

Благодаря

Мяло

+2

Вы пробовали что-нибудь? –

+0

Различные вещи. Я попытался использовать парсинг JArray, но строка, которую я получаю, не имеет []. Я могу получить все, используя читатель, как JsonTextReader reader = новый JsonTextReader (новый StringReader (sub)); но тогда я должен проверить каждый элемент. Некоторые из строк могут иметь 100 + ответов, и мне нужно получить только несколько, поэтому я ищу поиск, чтобы получить конкретные. Аналогичным образом я попытался применить его к динамическим данным = JObject.Parse (sub); а затем сделать для каждого, поскольку я не мог добраться до «5», например. Может, потому что это номер? –

+0

Почему бы не просто десериализовать объект? – Steve

ответ

0

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

  dynamic data = JObject.Parse(sub); 
      Console.WriteLine("id:" + data.id.ToString()); 
      Console.WriteLine("ip:" + data.ip.ToString()); 
      string answersData = data.answers.ToString(); 
      //JObject answers = JObject.Parse(answersData); 
      dynamic danswers = JObject.Parse(answersData); 
      //get each answer - here we will use the mapping 
      //to-do: replace Console with saving to data store 

      Console.WriteLine("First name= " + (string)danswers["5"]["answer"]); 
      Console.WriteLine("Middle Name= " + getAnswer(danswers, "6", "control_textbox")); 

      Console.WriteLine("Last Name=" + getAnswer(danswers,"7","control_textbox")); 
      Console.WriteLine("Address=" + getAnswer(danswers, "8", "control_textbox")); 
      Console.WriteLine("Email=" + getAnswer(danswers, "9", "control_textbox")); 
      Console.WriteLine("Phone=" + getAnswer(danswers, "10", "control_textbox")); 
      Console.WriteLine("Anticipated Start Semester=" + getAnswer(danswers, "11", "control_textbox")); 
      Console.WriteLine("Current high school/College=" + getAnswer(danswers, "13", "control_textbox")); 
      Console.WriteLine("Event name=" + getAnswer(danswers, "14", "control_textbox")); 
      Console.WriteLine("Notes=" + getAnswer(danswers, "15", "control_textbox")); 
      Console.ReadLine(); 

И getAnswer является

private static string getAnswer(JObject danswers,string qid, string answertype) 
    { 
     // more "type" later 
     string returnValue = ""; 
     if (danswers[qid] != null && ((string)danswers[qid]["type"] == "control_textbox" || (string)danswers[qid]["type"] == "control_email" || (string)danswers[qid]["type"] == "control_textarea")) 
     { 
      returnValue = (string)danswers[qid]["answer"]; 
     } 
     else 
     { 
     //need better error 
      returnValue = "Not found or type is not handled"; 
     } 
     return (returnValue); 
    } 
Смежные вопросы