Как извлечь данные из этого формата JSON?

У меня есть документ JSON, и я пытаюсь извлечь отдельные данные из этого документа JSON. Однако, когда я пытаюсь извлечь, все, что я получаю, - это числа, которых нет в документах.

Вот документ:

user: [{
     serialNo: 1,
     details: [{ name: "John",
             job: "Receptionist" }]
 },
 {
     serialNo: 2,
     details: [{
             name: "Alan",
             job: "Salesman"
          }]
  }
]

Итак, я попытался сделать это, чтобы извлечь имя «Алан».

using (var response = (HttpWebResponse)request.GetResponse())
{
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        var js = new JavaScriptSerializer();
        var objText = reader.ReadToEnd();
        var data = objText[1][0].name;
    }
}

Все, что он возвращает мне, это какое-то число, которое не имеет смысла, например, «123» или «467» и т. д.

@Arana, почему ты не можешь перейти по этой ссылке stackoverflow.com/questions/24233104/…

vishu minhas 11.07.2018 15:12

Преобразуйте свой json в C# и его легко извлечь.

vishu minhas 11.07.2018 15:16

взгляните на JSON.Net, а затем превратите его в POCO

Simon Price 11.07.2018 15:18

@vishuminhas Я пробовал var data= (string)obj["user"]["serialNo"]; , но появляется сообщение об ошибке. Он говорит, что [ ] должен быть в int.

Arane 11.07.2018 15:18

ваш json кажется недействительным, укажите правильный json

vishu minhas 11.07.2018 15:30

@vishumin имеет правильный json? это формат json, который я вижу, когда открываю его.

Arane 11.07.2018 15:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Взгляните на Json.NET - Newtonsoft. это пакет, который также можно найти с NuGet, просто набрав Newtonsoft :).

Затем вы можете сделать такую ​​модель:

первое решение:

using Newtonsoft.Json;
using System;

namespace UsersJSON
{

    public class UsersRepository
    {
        public User[] Users;
    }

    public class User
    {
        public int serialNo;
        public string[] details;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var json = @"{
  users: [
  {
    serialNo: 1,
    details: ['John', 'Receptionist']
  },
  {
    serialNo: 2,
    details: ['Alan', 'Salesman']
  }]
}";
            var usersList = JsonConvert.DeserializeObject<UsersRepository>(json);
            Console.WriteLine(usersList.Users[0].details[0]); // prints "John"
            Console.ReadLine();
        }
    }
}

второе решение:

using Newtonsoft.Json;
using System;

namespace UsersJSON
{

    public class UsersRepository
    {
        public User[] Users;
    }

    public class User
    {
        public int serialNo;
        public UserDetails details;
    }

    public class UserDetails
    {
        public string name;
        public string job;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var json = @"{
  users: [
  {
    serialNo: 1,
    details: {name: 'John', job: 'Receptionist'}
  },
  {
    serialNo: 2,
    details: {name: 'Alan', job:'Salesman'}
  }]
}";
            var usersList = JsonConvert.DeserializeObject<UsersRepository>(json);
            Console.WriteLine(usersList.Users[0].details.name); // prints "John"
            Console.ReadLine();
        }
    }
}

Оба требуют, чтобы вы немного изменили вывод JSON.

Привет, большое спасибо за предоставленные коды. Однако, когда я попытался сделать то же самое, я сделал отладку в части var usersList, я получил от нее нуль.

Arane 11.07.2018 15:38

Код, который я изначально опубликовал, не был протестирован, но с тех пор я вернулся, чтобы взглянуть на код, и он заработал, но я потребовал, чтобы я изменил ваш JSON, поскольку строка, которую вы предоставили, фактически недействительна. Если вы посмотрите на мое теперь отредактированное решение, вы сможете увидеть, как выглядит действительный JSON :)

Dan Scott 11.07.2018 15:53

Если вы хотите иметь name: и job: в качестве аксессоров, вам нужно будет использовать нотацию {name: "name", job: "job"} вместо [], потому что нотация [] предназначена для массивов, а не объектов, а вы нельзя использовать: для определения средств доступа к элементам массива в JSON. Вы можете проверить, действителен ли ваш JSON, используя эту ссылку jsonviewer.stack.hu

Dan Scott 11.07.2018 15:57

Я опробовал RAW-строки моего JSON в предоставленном вами jsonviewer. Может быть отформатирован. Но я не уверен, почему в моих кодах я получаю нулевое значение, хотя я следую точным шагам .. хм

Arane 11.07.2018 16:04

Поэтому я использовал предоставленный вами json и поставил {в начале и} в конце, чтобы увидеть, форматирует ли его программа просмотра, и это действительно так, Json.NET ожидает увидеть фигурные скобки «{}» вместо квадратных ». [] "когда внутри есть имена вроде name:" value ". Я могу еще раз отредактировать свой код, чтобы вы могли увидеть альтернативный способ структурировать свой JSON.

Dan Scott 11.07.2018 16:09

Также я только что заметил, что это правильный JSON, в нем просто отсутствует начало {и конец}, если вы хотите использовать второе решение, просто измените общедоступные детали UserDetails на общедоступные детали UserDetails []; и он должен работать так же, но вы просто получите доступ к нему через массив

Dan Scott 11.07.2018 16:16

Другие вопросы по теме