티스토리 뷰

목차

    반응형

    [C# JSON] LINQ, JSONPath로 데이터 가져오기


    C# JSON SelectToken()은 JObject에 있는 문자열, 정수 등을 가져오는데 사용합니다.

    이때 C# JSONPath, LINQ도 함께 사용할 수 있어 실제 구현 방법은 총 3가지입니다.


    [C# JSON] LINQ, JSONPath로 데이터 가져오기[[C# JSON] LINQ, JSONPath로 데이터 가져오기]


    C# Json 1. SelectToken


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    1JObject o = JObject.Parse(@"{
      'Stores': [
        'Lambton Quay',
        'Willis Street'
      ],
      'Manufacturers': [
        {
          'Name': 'Acme Co',
          'Products': [
            {
              'Name': 'Anvil',
              'Price': 50
            }
          ]
        },
        {
          'Name': 'Contoso',
          'Products': [
            {
              'Name': 'Elbow Grease',
              'Price': 99.95
            },
            {
              'Name': 'Headlight Fluid',
              'Price': 4
            }
          ]
        }
      ]
    }");
     
    string name =
        (string)o.SelectToken(
            "Manufacturers[0].Name");
    // Acme Co
     
    decimal productPrice = 
        (decimal)o.SelectToken(
            "Manufacturers[0].Products[0].Price");
    // 50
     
    string productName = 
        (string)o.SelectToken(
            "Manufacturers[1].Products[0].Name");
    // Elbow Grease
    cs

    C# Json 2. SelectToken() : JSONPath


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    1JObject o = JObject.Parse(@"{
      'Stores': [
        'Lambton Quay',
        'Willis Street'
      ],
      'Manufacturers': [
        {
          'Name': 'Acme Co',
          'Products': [
            {
              'Name': 'Anvil',
              'Price': 50
            }
          ]
        },
        {
          'Name': 'Contoso',
          'Products': [
            {
              'Name': 'Elbow Grease',
              'Price': 99.95
            },
            {
              'Name': 'Headlight Fluid',
              'Price': 4
            }
          ]
        }
      ]
    }");
     
    // manufacturer with the name 'Acme Co'
    JToken acme = 
        o.SelectToken(
            "$.Manufacturers[?(@.Name == 'Acme Co')]");
     
    Console.WriteLine(acme);
    // { "Name": "Acme Co", Products: [{ "Name": "Anvil", "Price": 50 }] }
     
    // name of all products priced 50 and above
    IEnumerable<JToken> pricyProducts =
        o.SelectTokens("$..Products[?(@.Price >= 50)].Name");
     
    foreach (JToken item in pricyProducts)
    {
        Console.WriteLine(item);
    }
    // Anvil
    // Elbow Grease
    cs


    C# Json 3. SelectToken() : LINQ


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    1IList<string> storeNames = 
        o.SelectToken("Stores").Select(
            s = > (string)s).ToList();
    // Lambton Quay
    // Willis Street
     
    IList<string> firstProductNames = 
        o["Manufacturers"].Select(m = > 
            (string)m.SelectToken("Products[1].Name")).ToList();
    // null
    // Headlight Fluid
     
    decimal totalPrice = 
        o["Manufacturers"].Sum(m = > 
            (decimal)m.SelectToken("Products[0].Price"));
    // 149.95
    cs


    [C# JSON] LINQ, JSONPath로 데이터 가져오기

    반응형