2017-10-05 2 views
-1

Node.js를 사용하여 중첩 배열을 개별 객체로 파싱하는 데 도움이 필요합니다. 도움을 많이 주셨습니다.중첩 된 json 배열을 Node.js가있는 별도의 json 객체로 구문 분석


내가 마지막이 출력 -

"Status": "0", 
"Message": "OK", 
"Count": "3724", 

와 나는 개체 -

  • InvoiceRecords 별도의 JSON으로 다음이 필요합니다

    는 (하나의 발생에 이러한이없는 필요

    json의 시간)

  • InvoiceRecordHeaderDetails (발생 JSON에서 ultiple 시간)
  • InvoiceRecordSplitDetails은 JSON (여러 번)
  • InvoiceRecordLineItemDetails 발생 JSON (여러 번)
  • InvoiceTaxCodeDetails 발생 (다음 적이 JSON에서 여러 번)

발생 json 데이터 샘플 (잘 렸음) :

{ 
"Status": "0", 
"Message": "OK", 
"Count": "3724", 
"InvoiceRecords": [ 
    { 
     "InvoiceDate": "8/9/2017 12:00:00 AM", 
     "InvoiceLocation": "002", 
     "InvoiceNumber": "2004085", 
     "InvoiceRecordHeaderDetails": [ 
      { 
       "InvNum": "2004085", 
       "Location": "002", 
       "InvDate": "8/9/2017 12:00:00 AM" 
      } 
     ], 
     "InvoiceRecordSplitDetails": [ 
      { 
       "UniqueID": "1757391", 
       "InvNum": "2004085", 
       "Location": "002", 
       "InvoiceDate": "8/9/2017 12:00:00 AM" 
      } 
     ], 
     "InvoiceRecordLineItemDetails": [ 
      { 
       "UniqueID": "3939934", 
       "InvNum": "2004085", 
       "Location": "002", 
       "InvoiceDate": "8/9/2017 12:00:00 AM" 
      } 
     ], 
     "InvoiceTaxCodeDetails": [ 
      { 
       "InvoiceDate": "8/9/2017 12:00:00 AM", 
       "Location": "002", 
       "InvNum": "2004085", 
      } 
     ] 
    } 
] 

}


업데이트합니다 지침 (내 생각)에 이어 크리스 - adorna

@ 2

하지만하다가 충돌 (도움?)

// Parse input file data as json 
var jsonContent = JSON.parse(fs.readFileSync(inputFile, 'utf8')); 

//1. Create 4 empty arrays, one each for record header, splits, line items and tax code details 
var recordHeader; 
var splits; 
var lineItems; 
var taxCodes; 

//2. Use a forEach function to iterate through InvoiceRecords 

var i; 
for (i = 0; i < jsonContent.length; i++) { 
    var record = jsonContent[i].InvoiceRecords; 
}; 
console.log(record); 

2 단계 못하고 아무것도 콘솔에서 '정의되지 않은'.

+0

에 각 배열의 내용을 작성하는 기본 fs 모듈을 사용 개별 객체로 여러 번 발생하는 것, 객체의 개별 배열을 의미합니까?또한, 각각의 배열이 이미 여러분의 입력에 있다는 의미에서 여러 번 발생합니까?'InvoiceRecords'는 ​​배열이기 때문에 각각의 InvoiceRecordHeaderDetails 배열로 여러 객체를 가질 수 있습니다. (그런데, "json 객체"와 같은 것은 없다. "(http://benalman.com/news/2010/03/theres-no-suchthing-as-a-json/) .) – nnnnnn

+0

미안하지만, 나는 이것에 아주 새롭다. 'InvoiceRecords' 배열은 다양한 송장 목록입니다. 해당 인보이스에는 1 개의 머리글, 1 개 이상의 분할 (납부자별로 분할), 1 개 이상의 품목 (여러 제품 판매) 및 1 개 이상의 세금 코드 세부 사항 (각 품목에 대한 세금)이 포함됩니다. – jag959

+0

원하는 출력물이 당신의 말로는 나에게 분명하지 않은 것처럼 보이는 것을 보여주기 위해서입니다. – jfriend00

답변

0

, 문자 특히이 부분을 질문을 촬영 : "출력 각 배열을 개별 JSON 파일을"의 라인을 따라 뭔가 시도해보십시오

  1. 4 개 빈 배열, 레코드 헤더 각각 하나씩, 분할, 라인 만들기를 항목 및 세금 코드의 자세한 사항
  2. 사용 forEachfunction 각 iteratee 객체의 경우 InvoiceRecords
  3. 을 반복하려면, A는 for...ofstatement통해 를 반복 사용
  4. 조건부 표현식을 사용하여 키 === 사용자의 타겟 (예 : 해당 배열에 'InvoiceTaxCodeDetails'), push
  5. forEach 기능이 완료되면, then는 당신이 필요로 말하는 JSON 파일
+0

위의 "업데이트 2"를 참조하십시오. – jag959

+0

'var record'는'for' 루프 안에 정의되어 있습니다. 따라서'console.log (record);에' 'record'가 루프 외부에서 호출 할 때'undefined '가됩니다. 이것은 JS의 범위 지정 규칙의 일부입니다. 관련이 없다면'var i'는'for (var i')와 같이 괄호 안에 선언해야합니다. 그렇지 않으면'i'가 스크립트에서 전역 적으로 지정되며 모든 종류의 부작용이있을 수 있습니다/ –

+0

또한, 의도 한 방식으로 객체에 대해 표준'for' 루프를 사용할 수 없습니다. 배열에 사용됩니다. 그래서 forEach 함수가 객체를 반복 할 것이라고 제안했기 때문에 필자는 (for) 루프] (https://stackoverflow.com/questions/684672/how-do-i-loop-through-or-enumerate-home.php)를 수행 할 수 있습니다. - 자바 스크립트 개체). –

관련 문제