PHP 8 속성을 사용한 JSON 비정렬화

8224 단어 phpunmarshalphp8json
일부 JSON 데이터를 클래스에 비정렬화하고 PHP 8 속성을 사용하여 더 깔끔하고 사용하기 쉽게 만들 수 있다는 것을 깨달았습니다.

JSON 데이터가 있다고 가정해 보겠습니다.

 {
  "airline": "Foo Airlines",
  "aircraft": {
    "type": "Boeing 747"
  },
  "route": [
    {
      "sequence": 1,
      "cost": 50.25,
      "luggageIncluded": true,
      "airline": "Foo Airlines",
      "departureAirport": "London Gatwick",
      "arrivalAirport": "Malta International"
    },
    {
      "sequence": 2,
      "cost": 20.25,
      "luggageIncluded": true,
      "airline": "Foo Airlines",
      "departureAirport": "Malta International",
      "arrivalAirport": "London Gatwick"
    }
  ]
}


위의 데이터는 런던 개트윅발 몰타인터내셔널행 항공편을 나타냅니다.

위의 데이터 구조를 나타내는 Flight 클래스와 FlightRoute 클래스의 두 가지 클래스가 있다고 가정해 보겠습니다.

비행.php

class Flight
{
    #[JSON(field: 'airline')]
    public string $airlineName;

    #[JSON(field: 'aircraft.type')]
    public string $aircraftType;

    #[JSON(field: 'route', type: FlightRoute::class)]
    public array $route;
}


FlightRoute.php

class FlightRoute
{
    #[JSON('sequence')]
    public int $sequence;

    #[JSON('cost')]
    public float $cost;

    #[JSON('luggageIncluded')]
    public bool $luggageIncluded;

    #[JSON('airline')]
    public string $airline;

    #[JSON('departureAirport')]
    public string $departureAirport;

    #[JSON('arrivalAirport')]
    public string $arrivalAirport;
}


보시다시피 라이브러리의 JSON 속성을 사용하여 JSON 데이터의 필드를 선언하고 데이터가 배열인 경우 유형을 선언합니다.

이 데이터를 비정렬화해 보겠습니다. :)

// Create a new flight class
$flight = new Flight();

// Load our JSON data from file
$jsonData = json_decode(file_get_contents('flight.json'), true);

// Unmarshal JSON
Unmarshal::decode($flight, $jsonData);


그리고 짜잔!

class Flight#3 (3) {
  public string $airlineName =>
  string(12) "Foo Airlines"
  public string $aircraftType =>
  string(10) "Boeing 747"
  public array $route =>
  array(2) {
    [0] =>
    class FlightRoute#11 (6) {
      public int $sequence =>
      int(1)
      public float $cost =>
      double(50.25)
      public bool $luggageIncluded =>
      bool(true)
      public string $airline =>
      string(12) "Foo Airlines"
      public string $departureAirport =>
      string(14) "London Gatwick"
      public string $arrivalAirport =>
      string(19) "Malta International"
    }
    [1] =>
    class FlightRoute#8 (6) {
      public int $sequence =>
      int(2)
      public float $cost =>
      double(20.25)
      public bool $luggageIncluded =>
      bool(true)
      public string $airline =>
      string(12) "Foo Airlines"
      public string $departureAirport =>
      string(19) "Malta International"
      public string $arrivalAirport =>
      string(14) "London Gatwick"
    }
  }
}


패키지를 사용하려면 다음을 사용하여 설치할 수 있습니다.

composer require mrbenosborne/json-unmarshal


즐거운 코딩! 🍺

https://github.com/mrbenosborne/json-unmarshal

크레딧: 영웅 이미지, https://php.watch/articles/php-attributes

좋은 웹페이지 즐겨찾기