Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mengendalikan data JSON dengan nilai tunggal dan array campuran untuk harta yang sama?

Bagaimana untuk mengendalikan data JSON dengan nilai tunggal dan array campuran untuk harta yang sama?

Linda Hamilton
Lepaskan: 2025-02-02 21:06:09
asal
372 orang telah melayarinya

How to Handle JSON Data with Mixed Single and Array Values for the Same Property?

data json

<:> Soalan:

Apabila memproses data JSON, atribut yang sama sering boleh dinyatakan sebagai nilai tunggal, atau ia boleh diwakili sebagai array nilai. Sebagai contoh, beban sah berikut yang diperolehi daripada Sendgrid API:

Atribut "kategori" menggambarkan masalah ini. Untuk projek -projek tertentu, ia adalah rentetan, dan untuk item lain, ia adalah array rentetan. JSON.NET menyediakan dua kaedah untuk menangani ketidakkonsistenan ini: mengubah data yang dihantar atau mengkonfigurasi JSON.NET untuk menerima perbezaan.

Penyelesaian: jsonconveter
[
  {
    "email": "[email protected]",
    "timestamp": 1337966815,
    "category": [
      "newuser",
      "transactional"
    ],
    "event": "open"
  },
  {
    "email": "[email protected]",
    "timestamp": 1337966815,
    "category": "olduser",
    "event": "open"
  }
]
Salin selepas log masuk

Kaedah yang disyorkan adalah menggunakan JsonConverrer adat. Marilah kita menentukan kelas untuk mengubah data:

Untuk atribut yang mungkin satu item atau array (dalam contoh ini, "kategori"), kami mentakrifkannya sebagai senarai

dan menentukan penukar tersuai untuk memproses retrofitnya.

Berikut adalah pelaksanaan penukar:
class Item
{
    [JsonProperty("email")]
    public string Email { get; set; }

    [JsonProperty("timestamp")]
    public int Timestamp { get; set; }

    [JsonProperty("event")]
    public string Event { get; set; }

    [JsonProperty("category")]
    [JsonConverter(typeof(SingleOrArrayConverter<string>))]
    public List<string> Categories { get; set; }
}
Salin selepas log masuk

Penukar ini menentukan sama ada label yang diluluskan ke dalam array atau satu item diproses dengan sewajarnya. Jika ia adalah array, ia menukarkannya ke senarai

;

<法> penggunaan dan output
class SingleOrArrayConverter<T> : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(List<T>));
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JToken token = JToken.Load(reader);
        if (token.Type == JTokenType.Array)
        {
            return token.ToObject<List<T>>();
        }
        if (token.Type == JTokenType.Null)
        {
            return null;
        }
        return new List<T> { token.ToObject<T>() };
    }

    public override bool CanWrite
    {
        get { return false; }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}
Salin selepas log masuk

Untuk menggunakan penukar tersuai, sila kemas kini kod derivatif seperti yang ditunjukkan di bawah:

Program ini akan disiarkan dengan betul data JSON, dan atribut "kategori" akan diisi dengan sewajarnya ke dalam senarai rentetan untuk situasi tunggal dan situasi array.

Kaedah ini menyediakan kaedah yang fleksibel untuk memproses data JSON dengan harta yang sama dengan jenis nilai campuran.

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan data JSON dengan nilai tunggal dan array campuran untuk harta yang sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan