Json (PHP) düzenli ifadeyi nasıl kullanılır?

2 Cevap php

Şimdi ben böyle bir json kodu vardır:

{"1":
    {
    "text":"e1",
    "children":
        {
        "1":
            {
            "text":"e1_site1",
            "children":
                {"1":"e1_site1_salarie1_nom"}
            },
        "3":
            {
            "text":"e1_site2",
            "children":
                {
                "3":"e1_site2_sa1",
                "4":"e1_site2_sa2"
                }
            }
        }
    },
"2":
    {
    "text":"e2",
    "children":
        {
        "2":
            {
            "text":"e2_site2",
            "children":
                {
                "2":"e2_site2_salarie2_nom"
                }
            }
        }
    }
}

Ve ben olmak istiyorum:

[
    {
    "text":"e1",
    "children":
    [
        {
        "text":"e1_site1",
        "children":
        [
            {
            "text":"e1_site1_salarie1_nom"
            }
        ],
        "text":
            {
            "text":"e1_site2",
            "children":
            [
                {
                "text":"e1_site2_sa1"
                },
                {
                "text":"e1_site2_sa2"
                }
            ]
            }
    ],
    "text":
        {
        "text":"e2",
        "children":
        [
            {
            "text":"e2_site2",
            "children":
            [
                {
                "text":"e2_site2_salarie2_nom"
                }
            ]
            }
        ]
        }

Ben şu anda ne yaptın, onu tam ve bitmiş değil:

$json = json_encode($entreprise);
$mode = array("/{\"[0-9]\":{\"text\"/", "/children\":{\"[0-9]\"/","/,\"[0-9]\":{\"/", "/,\"[0-9]\":\"/","(}})");
$replacement = array("[{\"text\"","children\":[{\"text\"",",\"text\":{\"",",\"text\":\"","}]");
$json = preg_replace($mode, $replacement, $json);
dump($json);

Ve şu anki sonuç:

[
    {
    "text":"e1",
    "children":
    [
        {
        "text":"e1_site1",
        "children":
        [
            {
            "text":"e1_site1_salarie1_nom"
            }
        ],
        "text":
            {
            "text":"e1_site2",
            "children":
            [
                {
                "text":"e1_site2_sa1",
                "text":"e1_site2_sa2"
                }
            ]
            }
    ],
    "text":
        {
        "text":"e2",
        "children":
        [
            {
            "text":"e2_site2",
            "children":
            [
                {
                "text":"e2_site2_salarie2_nom"
                }
            ]
            }
        ]
        }

Düzenli ifade ile ideal bir çıktıya ulaşmak için nasıl biliyor musunuz?

Herhangi bir fikir veya öneriler takdir edilecektir! Şimdiden teşekkürler. ;)

Edit:

Çıktı soulmerge önerisine göre değiştirildi. Bu gibi:

[
    {
    "text":"e1",
    "children":
        {
        "1":
            {
            "text":"e1_site1",
            "children":
                {
                "1":"e1_site1_salarie1_nom"
                }
            },
        "3":
            {
            "text":"e1_site2",
            "children":
                {
                "3":"e1_site2_sa1",
                "4":"e1_site2_sa2"
                }
            }
        }
    },
    {
    "text":"e2",
    "children":
        {
        "2":
            {
            "text":"e2_site2",
            "children":
                {
                "2":"e2_site2_salarie2_nom"
                }
            }
        }
    }
]

Ama yine de benim ideal sonuç için uzun bir yolculuk var.

Herkes bunu biliyor mu?

2 Cevap

Düzenli ifadeler burada kullanabileceğiniz kötü yaklaşım vardır:

  • Sen, sorun size 3 ay içinde geri bu kod gelmek eğer ne yaptığını anlamak olacaktır
  • Bu zor nokta hata yapmak kolaydır,
  • PHP kendi json nesil kodunu değiştirmek için karar verirse kod kıracak

Ondan hiçbir risk alarak ve then json_encode() çağırmadan $entreprise dizideki tüm işlemleri yapma öneriyoruz.

Oluşturulan JSON yerine dizilerin nesneler vardır sebebi orijinal dizi 0-endeksli olmasıdır. Sadece örnek için, bu deneyin:

dump(json_encode(array_values($enterprise)));

JSON düzenli bir dil değildir ve bu nedenle bunu ayrıştırmak için normal ifadeler kullanamazsınız. Gibi aynı anahtarla birden oluşumları olamaz gibi ve beklenen çıkışı geçerli JSON değil

{
    "text":"e1_site2_sa1",
    "text":"e1_site2_sa2"
}