>source

백엔드에서 Redis를 사용하여 구독을 확장하고 있습니다. 이 라이브러리를 사용하여 자바 스크립트 코드 위에 redis를 구현하고 있습니다. 그리고 모델에 몽구스를 사용합니다.

redis 게시 중에 몽구스에서 얻은 객체를 문자열로 묶어야합니다. 구독 끝에서 구문 분석하고 문자열 화해야 할 객체에 중첩 된 객체가있을 때까지 모두 잘 작동합니다.

내 물건이 이것이라면 :

{ subtitle: '',
   description: '',
   checklists:
    [ { _id: 5cee450c0fa29d0b54275da0, items: [] },
      { _id: 5cee455c0c31785b0875e09d, items: [] },
      { _id: 5cee47dc6d32e72c6411ce2d, items: [] } ],
   attachments: [],
   labels: [],
   _id: 5ced1af26547233798f943f6,
   title: 'asfasf',
   box: 5cece1c3e6c3c13ff098658d,
   workflow: 5cece1cbe6c3c13ff0986591,
}

받습니다 :

{ cardUpdated:
    { 
      subtitle: '',
      description: '',
      checklists: [ [Object], [Object], [Object] ],
      attachments: [],
      labels: [],
      _id: '5ced1af26547233798f943f6',
      title: 'asfasf',
      box: '5cece1c3e6c3c13ff098658d',
      workflow: '5cece1cbe6c3c13ff0986591',
    } 
}

게시 할 때 다음 줄을 사용합니다 :

pub.publish(types.CARD_UPDATED,
          JSON.stringify(
            { cardUpdated: await getUpdatedCardStats(checklist.card) },
          ));

참고 : {} 에서 stringify에 대한 인수를 래핑한다는 것을 알고 있습니다.  그것 없이는 중첩 된 객체는 무시되지 않지만 구독 끝에서 키 속성 이름이 필요하기 때문에이 작업을 수행해야합니다. 즉, 여러 위치에서 다른 키 이름 으로이 게시 명령을 사용하고 있습니다.

이것에 대해 중첩 된 객체를 문자열 화하는 방법이 있습니까?

편집 : Redis의 구독 끝에서 문자열로 적절한 전체 객체를 얻었지만 실제로는 JSON.parse() 였습니다.  그것은 범인이었습니다. 구문 분석 후 중첩 된 객체를 완전히 무시합니다. 어쨌든 이것을 피할 수 있습니까?


  • 답변 # 1

    시도 :

    const value = JSON.stringify({
        cardUpdated: await getUpdatedCardStats(checklist.card)
    });
    pub.publish(types.CARD_UPDATED, value);
    
    

  • 답변 # 2

    이것은 유효한 JS 객체가 아닙니다 :

    { _id: 5cee450c0fa29d0b54275da0, items: [] }
    
    

    .toString() 의 출력이라고 생각합니다   {_id: ObjectId, items: any[] 유형의 객체 여기에 ObjectId가 정의되어 있습니다. 어쨌든,이 객체의 JSON 화는 사소한 것이 아니기 때문에 JSON.stringify 입니다.  단순히 [Object] 를 출력 .

    이 제한을 우회하기 위해 ObjectId.toString ()의 도움을 받아 객체를 사소한 JSON화할 수있는 것으로 변환하는 사용자 정의 함수를 구현할 수 있습니다.

  • 이전 matlab - max 함수를 사용하여 행렬에서 최대 요소와 인덱스를 찾는 방법은 무엇입니까?
  • 다음 json의 특정 객체에 씁니다 파이썬