serde를 사용하여 JSON 배열을 구조체로 역 직렬화하는 방법은 무엇입니까?

Cuteufo

다음 JSON 스 니펫을 Vec구조체 로 역 직렬화하려고합니다 Shape.

use serde::{Deserialize, Serialize};
use serde_json::{Result, Value};

#[derive(Debug, Serialize, Deserialize)]
struct Shape {  // this struct is not working, for display purpose only
    shape_type: String,
    d0: f64,
    d1: f64,
    d2: f64, //optional, like the case of "dot"
    d3: f64, //optional, like the case of "circle"
}

let json = r#"
  {[
    ["line", 1.0, 1.0, 2.0, 2.0],
    ["circle", 3.0, 3.0, 1.0],
    ["dot", 4.0, 4.0]
  ]}"#;

let data: Vec<Shape> = match serde_json::from_str(json)?;

분명히, 각 유형은 그것을 설명하기 위해 다른 숫자가 Shape필요 합니다. 위와 같이 JSON 데이터를 역 직렬화하는 구조체를 어떻게 정의해야 합니까?Stringf64Shape

프레첼 해머

당신은 내가 강력하게 추천하는 JSON 형식으로 제어가 가정 Shape으로 유형을 enum여러 모양을 나타낼 수있는 자동 구현 serde의 파생 매크로를 사용 Serialize하고 Deserialize위해를 Shape. 예:

use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
struct Point {
    x: f64,
    y: f64,
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "type")]
enum Shape {
    Dot { position: Point },
    Line { start: Point, end: Point },
    Circle { center: Point, radius: f64 },
}

fn main() {
    let shapes = vec![
        Shape::Dot {
            position: Point { x: 3.0, y: 4.0 },
        },
        Shape::Line {
            start: Point { x: -2.0, y: 1.0 },
            end: Point { x: 5.0, y: -3.0 },
        },
        Shape::Circle {
            center: Point { x: 0.0, y: 0.0 },
            radius: 7.0,
        },
    ];

    let serialized = serde_json::to_string(&shapes).unwrap();
    println!("serialized = {}", serialized);

    let deserialized: Vec<Shape> = serde_json::from_str(&serialized).unwrap();
    println!("deserialized = {:?}", deserialized);
}

운동장

JSON 형식을 절대 변경할 수 없다면 serde가 도움이되지 않습니다. 모양을 이기종 문자열 및 부동 배열로 직렬화하는 것은 매우 기괴한 선택입니다. 수동으로 다음 직접 (또는 도움이 당신에게 이상 사용에서 일부 파서 상자를) 구문 분석해야 디시리얼라이저 특성을 구현하는 수동 그것으로 바꿀 수 있도록 Shape.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JsonSerializer를 사용하여 이기종 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

정수를 키로 사용하여 JSON을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JSON 데이터를 모델 객체의 배열로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Jackson을 사용하여 키를 무시하는 객체로 JSON을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

@JsonProperty를 사용하여 JSON 응답을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

C # Newtonsoft를 사용하여 JSON 파일을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JSON을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Scala에서 playframework를 사용하여 json을 밀봉 특성으로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

배열을 json 객체로 직렬화하는 방법은 무엇입니까?

분류에서Dev

RenderedImage를 텍스트 문자열로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

DataGridView를 채우기 위해 JSON 파일을 DataTable로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

DataGridView를 채우기 위해 JSON 파일을 DataTable로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Json.Net을 사용하여 숫자의 속성 이름으로 시작하는 json을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JSON 객체를 Jackson과 Kotlin Pair로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

강력한 형식의 개체로 JSON 응답을 직접 역 직렬화 할 때 필드를 피하는 방법은 무엇입니까?

분류에서Dev

JavaScriptSerializer를 사용하여 JSON을 튜플으로 역 직렬화하는 방법

분류에서Dev

JavaScriptSerializer. JSON에서 문자열 배열을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

여러 개체를 단일 XML 파일로 직렬화 / 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JsonPath / Jackson : JSON 배열을 단일 객체 ( "[1,2,3]"-> Vector3d 인스턴스)로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

UPW C #의 Web API에서 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

XML을 객체로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

NewtonSoft Json을 사용하여 변수 유형 속성으로 클래스로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

역 직렬화 후 json을 호출하는 방법은 무엇입니까?

분류에서Dev

ArrayList를 다른 동작을 갖는 목록에 JSON 개체를 역 직렬화하는 가장 좋은 방법은 무엇입니까

분류에서Dev

특정 Json 노드를 Dictionary <string, object>로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

json4s를 사용하여 객체를 AST로 직렬화하는 방법은 무엇입니까?

분류에서Dev

Riak 백업을 JSON으로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

메시지 큐에서 여러 구조체를 역 직렬화 할 때 "boost :: archive :: archive_exception"을 피하는 방법은 무엇입니까?

분류에서Dev

Jackson을 사용하여 HTTP Get을 위해 복잡한 Json 객체를 QueryString으로 직렬화하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    JsonSerializer를 사용하여 이기종 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

  2. 2

    정수를 키로 사용하여 JSON을 역 직렬화하는 방법은 무엇입니까?

  3. 3

    JSON 데이터를 모델 객체의 배열로 역 직렬화하는 방법은 무엇입니까?

  4. 4

    Jackson을 사용하여 키를 무시하는 객체로 JSON을 역 직렬화하는 방법은 무엇입니까?

  5. 5

    @JsonProperty를 사용하여 JSON 응답을 역 직렬화하는 방법은 무엇입니까?

  6. 6

    C # Newtonsoft를 사용하여 JSON 파일을 역 직렬화하는 방법은 무엇입니까?

  7. 7

    JSON을 역 직렬화하는 방법은 무엇입니까?

  8. 8

    Scala에서 playframework를 사용하여 json을 밀봉 특성으로 역 직렬화하는 방법은 무엇입니까?

  9. 9

    배열을 json 객체로 직렬화하는 방법은 무엇입니까?

  10. 10

    RenderedImage를 텍스트 문자열로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

  11. 11

    DataGridView를 채우기 위해 JSON 파일을 DataTable로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

  12. 12

    DataGridView를 채우기 위해 JSON 파일을 DataTable로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

  13. 13

    Json.Net을 사용하여 숫자의 속성 이름으로 시작하는 json을 역 직렬화하는 방법은 무엇입니까?

  14. 14

    JSON 객체를 Jackson과 Kotlin Pair로 역 직렬화하는 방법은 무엇입니까?

  15. 15

    강력한 형식의 개체로 JSON 응답을 직접 역 직렬화 할 때 필드를 피하는 방법은 무엇입니까?

  16. 16

    JavaScriptSerializer를 사용하여 JSON을 튜플으로 역 직렬화하는 방법

  17. 17

    JavaScriptSerializer. JSON에서 문자열 배열을 역 직렬화하는 방법은 무엇입니까?

  18. 18

    여러 개체를 단일 XML 파일로 직렬화 / 역 직렬화하는 방법은 무엇입니까?

  19. 19

    JsonPath / Jackson : JSON 배열을 단일 객체 ( "[1,2,3]"-> Vector3d 인스턴스)로 역 직렬화하는 방법은 무엇입니까?

  20. 20

    UPW C #의 Web API에서 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

  21. 21

    XML을 객체로 역 직렬화하는 방법은 무엇입니까?

  22. 22

    NewtonSoft Json을 사용하여 변수 유형 속성으로 클래스로 역 직렬화하는 방법은 무엇입니까?

  23. 23

    역 직렬화 후 json을 호출하는 방법은 무엇입니까?

  24. 24

    ArrayList를 다른 동작을 갖는 목록에 JSON 개체를 역 직렬화하는 가장 좋은 방법은 무엇입니까

  25. 25

    특정 Json 노드를 Dictionary <string, object>로 역 직렬화하는 방법은 무엇입니까?

  26. 26

    json4s를 사용하여 객체를 AST로 직렬화하는 방법은 무엇입니까?

  27. 27

    Riak 백업을 JSON으로 역 직렬화하는 방법은 무엇입니까?

  28. 28

    메시지 큐에서 여러 구조체를 역 직렬화 할 때 "boost :: archive :: archive_exception"을 피하는 방법은 무엇입니까?

  29. 29

    Jackson을 사용하여 HTTP Get을 위해 복잡한 Json 객체를 QueryString으로 직렬화하는 방법은 무엇입니까?

뜨겁다태그

보관