2013-02-11 1 views
1

JSON에서 데이터 세트를 사용하고 C# JSON.net 라이브러리를 사용하여 데이터를 추출하려고했지만 데이터를 추출하는 데 어려움이 있습니다. 데이터에는 루트 요소가 있고 행이 있습니다. "rows"내의 각 행에 대해 [ "conversionPathValue"] [ "nodeValue"] 값의 목록을 추출하고 함께 연결 한 다음 primitiveValue 값과 연결합니다. 2 행의 실시 예 번호는 아래와 같다 : (jsonExtract가하는 jobject이다) 이것은 개체의 인스턴스로 설정되지 "개체 참조의 오류를 범중첩 된 배열로 JSON.net C#을 사용하여 JSON 읽기

  var rows = jsonExtract["root"]["rows"][0].Children(); 

      foreach (JToken result in rows) 
      { 
       var primitiveValues = result["primitiveValue"].Values<string>(); 
       var pathValues = result["conversionPathValue"].Values<string>(); 

       string joinedprimitiveValues = string.Join(",", primitiveValues); 
       string joinedpathValues = string.Join("-", pathValues); 

       file2.WriteLine(joinedpathValues + ", " + joinedprimitiveValues); 

      } 

:

 "rows": [ 
     [ 
      { 
      "conversionPathValue": [ 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       } 
      ] 
      }, 
      { 
      "primitiveValue": "20130122" 
      }, 
      { 
      "primitiveValue": "000" 
      }, 
      { 
      "primitiveValue": "000001" 
      }, 
      { 
      "primitiveValue": "000" 
      }, 
      { 
      "primitiveValue": "11" 
      }, 
      { 
      "primitiveValue": "7290.521799" 
      } 
     ], 
     [ 
      { 
      "conversionPathValue": [ 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       }, 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       }, 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       }, 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       }, 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       }, 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       }, 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       }, 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "MET" 
       }, 
       { 
       "nodeValue": "(none)" 
       }, 
       { 
       "nodeValue": "(none)" 
       }, 
       { 
       "interactionType": "CLICK", 
       "nodeValue": "organic" 
       } 
      ] 
      }, 
      { 
      "primitiveValue": "20130122" 
      }, 
      { 
      "primitiveValue": "000" 
      }, 
      { 
      "primitiveValue": "000011" 
      }, 
      { 
      "primitiveValue": "005" 
      }, 
      { 
      "primitiveValue": "1" 
      }, 
      { 
      "primitiveValue": "1628.0" 
      } 
     ], 
        .....etc........ 

다음 코드를 사용하여 "primitiveValues를 설정할 때.

중첩 된 요소에 문제가 있음을 알고 있지만 어떻게 처리해야할지 모르겠다. 누구든지 제발 도와 줄 수 있습니까?

답변

3

코드에있는 문제는 primitiveValues 또는 pathValues이 null 인 경우를 처리하지 않는다고 생각합니다. 행을 주소 지정하는 방식 때문에 실제로 모든 반복에서 발생합니다.

예를 들어,이 행의 경우 :

{ 
    "primitiveValue": "20130122" 
}, 

그런 다음 result["conversionPathValue"]null를 반환 할 것입니다.

이 시도 : 작동 갈 수있는 내가 JSON 주위 {}을 추가

Primitive Values: 
20130122,000,000001,000,11,7290.521799 
Conversion Paths: 
MET 

Primitive Values: 
20130122,000,000011,005,1,1628.0 
Conversion Paths: 
MET,MET,MET,MET,MET,MET,MET,MET,(none),(none),organic 

참고 : 나는 주어진 JSON에서 해당 프로그램을 실행할 때

var obj = JObject.Parse(json); 
var rows = obj["rows"].Children(); 

foreach (JToken row in rows) 
{ 
    List<string> conversionPaths = new List<string>(); 
    List<string> primitiveValues = new List<string>(); 

    foreach (JToken value in row.Children()) 
    { 
     var primitiveValue = value["primitiveValue"]; 

     if (primitiveValue != null) 
     { 
      primitiveValues.Add(primitiveValue.Value<string>()); 
     } 

     var conversionPathValue = value["conversionPathValue"]; 

     if (conversionPathValue != null) 
     { 
      var paths = conversionPathValue.Children() 
       .Where(t => t["nodeValue"] != null) 
       .Select(t => t["nodeValue"].Value<string>()); 

      conversionPaths.AddRange(paths); 
     } 
    } 

    Console.WriteLine("Primitive Values:"); 
    Console.WriteLine(string.Join(",", primitiveValues.ToArray())); 
    Console.WriteLine("Conversion Paths:"); 
    Console.WriteLine(string.Join(",", conversionPaths.ToArray()) + "\n"); 
} 

는 다음과 같은 생산 .

+0

이것은 다음 줄에서 나에게 불어납니다. var primitiveValue = value [ "primitiveValue"]; "Newtonsoft.Json.Linq.JProperty에서 자식 값에 액세스 할 수 없습니다." – wloescher

+0

@wloescher JSON은 어떤 모습입니까? 속성이있을 때 오류가 아이에게 액세스하려고하면 오는 것 같습니다. –

+0

같은 장소에서 같은 오류가 발생합니다 –