Member 13229879 Ответов: 2

Как разделить данные JSON на несколько объектов


У меня есть данные JSON, поступающие из приложения в следующем формате:
[{ "name":"First",
   "Custnumber":"123SC"
 },
 {"name":"Second",
   "Custnumber":"67BC"
 },
 {"name":"Third",
   "Custnumber":"99ABC"
 },
 {"name":"Fourth",
   "Custnumber":"123SC"
 }]

Теперь я должен разделить это на основе Custnumber, с которым должно быть так:
[{ "name":"First",
   "Custnumber":"123SC"
 },
 {"name":"Fourth",
   "Custnumber":"123SC"
 }]

[{"name":"Second",
  "Custnumber":"67BC"
}]

[{"name":"Third",
  "Custnumber":"99ABC"
}]


Что я уже пробовал:

Пожалуйста, помогите мне решить эту проблему. Я застрял здесь на 2 дня.

Заранее спасибо.

Christian Amado

А что вы пробовали?

2 Ответов

Рейтинг:
7

F-ES Sitecore

Просто десериализуйте json в объекты, выберите нужные данные из этих объектов, а затем повторно сериализуйте.

[DataContract]
public class Data
{
    [DataMember(Name = "name")]
    public string Name { get; set; }
    [DataMember]
    public string Custnumber { get; set; }
}


string json = "[{\"name\":\"First\", \"Custnumber\":\"123SC\" }, { \"name\":\"Second\", \"Custnumber\":\"67BC\" }, { \"name\":\"Third\", \"Custnumber\":\"99ABC\" }, { \"name\":\"Fourth\", \"Custnumber\":\"123SC\" }]";

List<Data> data = null;

// System.Runtime.Serialization.Json.DataContractJsonSerializer is just one way to
// serialise JSON, use whatever way you want to do this bit
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<Data>));
data = ser.ReadObject(ms) as List<Data>;
ms.Close();

// get just the person you're interested in

data = data.Where(d => d.Custnumber == "123SC").ToList();

// serialize back to JSON

ms = new MemoryStream();

ser.WriteObject(ms, data);
ms.Position = 0;
json = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();


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

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;


Рейтинг:
15

Bryian Tan

Предполагая, что группировка будет происходить на стороне клиента? Вот вам пример : Группа json - JSFiddle[^]

JSON будет выглядеть следующим образом после группировки

{
   "123SC":[
      {
         "name":"First",
         "Custnumber":"123SC"
      },
      {
         "name":"Fourth",
         "Custnumber":"123SC"
      }
   ],
   "67BC":[
      {
         "name":"Second",
         "Custnumber":"67BC"
      }
   ],
   "99ABC":[
      {
         "name":"Third",
         "Custnumber":"99ABC"
      }
   ]
}


Здесь выводится зацикливание объекта

Custnumber 123SC has 2 customers :
---->1. First.
---->2. Fourth.
Custnumber 67BC has 1 customers :
---->1. Second.
Custnumber 99ABC has 1 customers :
---->1. Third. 


Ссылка:
javascript - группировка JSON по значениям - переполнение стека[^]