중첩 된 JSON API 데이터를 CSV로 역 직렬화 및 내보내기

조나단 코베트

중첩 된 JSON에서 API의 일부 데이터를 가져 와서 CSV로 내 보내야합니다. 여러 클래스를 만들지 않고 해당 데이터를 CSV로 내보내는 데 적합한 구문을 찾을 수 없습니다 (수백 개의 속성이 있으며 새 속성을 동적으로 추가 할 수 있음).

API의 JSON 응답 구조는 다음과 같습니다.

{
    "data": [
        {
            "id": "1",
            "type": "Bus",
            "attributes": {
                "property-two": "2020-12-10",
                "property-three": "D",
                "property-four": null,
                "property-five": 5
            }
        },
        {
            "id": "2",
            "type": "Car",
            "attributes": {
                "property-two": "2020-12-10",
                "property-three": "D",
                "property-four": null,
                "property-five": 5
            }
        }
    ]
}

각 데이터 세트의 "attributes"노드를 CSV로 내보내기 만하면되지만 데이터를 평면화하거나 해당 노드 만 추출하는 것처럼 보이지는 않습니다.

다음 코드는 JToken개체 목록을 가져 오지만 다시 직렬화 및 역 직렬화하지 않고 CSV로 내보낼 수 있는지 잘 모르겠습니다. 데이터 유형은 열을 추가하고 제거 할 수 있으므로 동적입니다.

var jsonObject = JObject.Parse(apiResponseString);
var items = jsonObject["data"].Children()["attributes"].ToList();
//TODO: Export to CSV, DataTable etc

속성 노드에서만 데이터를 역 직렬화 할 수 있습니까? 그리고 어떻게 수행 할 수 있습니까 ( 초기화에서든 목록을 다시 JObject.Parse직렬화 하든 JToken)? 나는에 묶여 있지 않으므로 JObjectNewtonsoft 또는 기타도 사용할 수 있습니다.

브라이언 로저스

Json.Net의 LINQ-to-JSON API (JObjects) 사용하여 아래와 같이 JSON 데이터를 CSV로 변환 할 수 있습니다.

먼저 몇 가지 짧은 확장 메서드를 정의합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;

public static class JsonHelper
{
    public static string ToCsv(this IEnumerable<JObject> items, bool includeHeaders = true)
    {
        if (!items.Any()) return string.Empty;
        var rows = new List<string>();
        if (includeHeaders)
        {
            rows.Add(items.First().Properties().Select(p => p.Name).ToCsv());
        }
        rows.AddRange(items.Select(jo => 
            jo.Properties().Select(p => p.Value.Type == JTokenType.Null ? null : p.Value).ToCsv()
        ));
        return string.Join(Environment.NewLine, rows);
    }

    public static string ToCsv(this IEnumerable<object> values)
    {
        const string quote = "\"";
        const string doubleQuote = "\"\"";
        return string.Join(",", values.Select(v => 
            v != null ? string.Concat(quote, v.ToString().Replace(quote, doubleQuote), quote) : string.Empty
        ));
    }
}

그런 다음 다음을 수행 할 수 있습니다.

var obj = JObject.Parse(json);
var csv = obj.SelectTokens("..attributes").Cast<JObject>().ToCsv();

다음은 작동하는 데모입니다. https://dotnetfiddle.net/NF2G2l

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

중첩 된 JSON을 중첩 된 Dictionary <string, object>로 역 직렬화

분류에서Dev

JSON.NET URL에서 중첩 된 데이터 역 직렬화

분류에서Dev

잘못된 변수 이름으로 중첩 된 JSON 역 직렬화

분류에서Dev

System.Text.Json-중첩 된 개체를 문자열로 역 직렬화

분류에서Dev

JSON.NET으로 중첩 된 JSON 응답 역 직렬화

분류에서Dev

Wordpress API JSON 응답에서 중첩 된 JSON 태그 및 첨부 파일을 역 직렬화

분류에서Dev

중첩 된 객체의 필드 중 하나를 기반으로 중첩 된 JSON 객체를 기본 유형으로 역 직렬화하는 방법

분류에서Dev

중첩 된 JSON의 Unity 역 직렬화

분류에서Dev

중첩 된 JSON 역 직렬화

분류에서Dev

Newtonsoft JSON이 내 json 파일의 중첩 된 개체를 역 직렬화하지 않습니다.

분류에서Dev

C #에서 중첩 된 목록으로 JSON 역 직렬화

분류에서Dev

Json을 중첩 된 pojo로 역 직렬화

분류에서Dev

중첩 된 사전이있는 JSON 파일 역 직렬화

분류에서Dev

Google 시트에서 API로 중첩 된 데이터 보내기

분류에서Dev

JSON에서 /에서 중첩 된 파생 개체를 사용하여 C # 데이터 개체 역 직렬화

분류에서Dev

System.Text.Json API 호출에서 중첩 된 개체 역 직렬화-데이터는 부모 JSON 속성에 래핑됩니다.

분류에서Dev

Symfony 4에서 중첩 된 DateTime 객체를 사용하여 json을 엔티티로 역 직렬화

분류에서Dev

JSON 역 직렬화-값으로 필요한 중첩 목록 및 키

분류에서Dev

Powershell은 중첩 된 Json을 CSV로 행으로 내보내기

분류에서Dev

C #에서 Newtonsoft를 사용하여 중첩 된 JSON 개체의 역 직렬화

분류에서Dev

xamarin c # 중첩 된 개체를 포함하는 Json 역 직렬화

분류에서Dev

JsonConvert.DeserializeObject를 사용하여 중첩 된 Json 문자열 역 직렬화

분류에서Dev

중첩 된 json 문자열을 역 직렬화하면 null 값이됩니다.

분류에서Dev

AWS Lambda에서 중첩 된 JSON 문자열 역 직렬화 (C #)

분류에서Dev

중첩 된 JSON 역 직렬화의 어려움

분류에서Dev

중첩 된 json 데이터의 직렬화

분류에서Dev

중첩 된 데이터 클래스의 JSON 직렬화

분류에서Dev

jQuery post ()를 사용하여 직렬화 된 양식 데이터 및 기타 데이터 보내기

분류에서Dev

axios를 사용하여 get 메서드로 중첩 된 JSON 데이터 보내기

Related 관련 기사

  1. 1

    중첩 된 JSON을 중첩 된 Dictionary <string, object>로 역 직렬화

  2. 2

    JSON.NET URL에서 중첩 된 데이터 역 직렬화

  3. 3

    잘못된 변수 이름으로 중첩 된 JSON 역 직렬화

  4. 4

    System.Text.Json-중첩 된 개체를 문자열로 역 직렬화

  5. 5

    JSON.NET으로 중첩 된 JSON 응답 역 직렬화

  6. 6

    Wordpress API JSON 응답에서 중첩 된 JSON 태그 및 첨부 파일을 역 직렬화

  7. 7

    중첩 된 객체의 필드 중 하나를 기반으로 중첩 된 JSON 객체를 기본 유형으로 역 직렬화하는 방법

  8. 8

    중첩 된 JSON의 Unity 역 직렬화

  9. 9

    중첩 된 JSON 역 직렬화

  10. 10

    Newtonsoft JSON이 내 json 파일의 중첩 된 개체를 역 직렬화하지 않습니다.

  11. 11

    C #에서 중첩 된 목록으로 JSON 역 직렬화

  12. 12

    Json을 중첩 된 pojo로 역 직렬화

  13. 13

    중첩 된 사전이있는 JSON 파일 역 직렬화

  14. 14

    Google 시트에서 API로 중첩 된 데이터 보내기

  15. 15

    JSON에서 /에서 중첩 된 파생 개체를 사용하여 C # 데이터 개체 역 직렬화

  16. 16

    System.Text.Json API 호출에서 중첩 된 개체 역 직렬화-데이터는 부모 JSON 속성에 래핑됩니다.

  17. 17

    Symfony 4에서 중첩 된 DateTime 객체를 사용하여 json을 엔티티로 역 직렬화

  18. 18

    JSON 역 직렬화-값으로 필요한 중첩 목록 및 키

  19. 19

    Powershell은 중첩 된 Json을 CSV로 행으로 내보내기

  20. 20

    C #에서 Newtonsoft를 사용하여 중첩 된 JSON 개체의 역 직렬화

  21. 21

    xamarin c # 중첩 된 개체를 포함하는 Json 역 직렬화

  22. 22

    JsonConvert.DeserializeObject를 사용하여 중첩 된 Json 문자열 역 직렬화

  23. 23

    중첩 된 json 문자열을 역 직렬화하면 null 값이됩니다.

  24. 24

    AWS Lambda에서 중첩 된 JSON 문자열 역 직렬화 (C #)

  25. 25

    중첩 된 JSON 역 직렬화의 어려움

  26. 26

    중첩 된 json 데이터의 직렬화

  27. 27

    중첩 된 데이터 클래스의 JSON 직렬화

  28. 28

    jQuery post ()를 사용하여 직렬화 된 양식 데이터 및 기타 데이터 보내기

  29. 29

    axios를 사용하여 get 메서드로 중첩 된 JSON 데이터 보내기

뜨겁다태그

보관