Second attempt: What's wrong with how I'm deserializing JSON here? - eviltoast

The first post had a couple errors that made things confusing. I have an accurately formatted JSON response, but I still can’t seem to deserialize it.

I keep getting an error where the response isn’t matching up as expected: Error(“data did not match any variant of untagged enum NationResponse”

I have a JSON response that looks like this:

 {
      {
            "id": 1,
            "country": "usa"
        },
        [
            {
                "id": 1,
                "age": 37,
                "name": "John"
            },
            {
                "id": 2,
                "age": 21,
                "name": "Nick"
            },
        ]
}

And I’m trying to deserialize it, but I can’t seem to get it right. Isn’t this accurate?

#[derive(Deserialize, Debug)]
#[serde(untagged)]
enum NationResponse {
    Nation(Nation),
    People(Vec),
}

struct Person {
    id : i32,
    age : i32,
    name : String
}

struct Nation {
    id : i32,
    country : String
}

Edit:

The problem I was actually experiencing was trying to use an enum as the response. Yes the formatting for my example was wrong (it should have been an array). But the structure besides that was accurate.

What I needed was Vec>

  • orhtej2
    link
    fedilink
    English
    arrow-up
    19
    arrow-down
    1
    ·
    1 year ago

    I don’t get it, this is not valid JSON.

    • nerdblood@programming.devOP
      link
      fedilink
      arrow-up
      2
      ·
      1 year ago

      It should be wrapped in an array, not an object. Then it’s valid. The problem was that I was trying to use an enum.