Отображение json данных из массива с несколькими свойствами - PullRequest
4 голосов
/ 16 июня 2020

У меня есть следующий объект json

https://codebeautify.org/jsonviewer/cb01bb4d

obj = 
{
  "api": "1.0.0",
  "info": {
    "title": "Events",
    "version": "v1",
    "description": "Set of events"
  },
  "topics": {
    "cust.created.v1": {                            //Take this value
      "subscribe": {
        "summary": "Customer Register Event v2",    //Take this value
        "payload": {
          "type": "object",
          "required": [
            "storeUid"

          ],
          "properties": {
            "customerUid": {
              "type": "string",
              "description": "Email of a Customer",
              "title": "Customer uid"
            }
          }
        }
      }
    },
    "qu.orderplaced.v1": {                     //Take this value
      "subscribe": {
        "summary": "Order Placed",             //Take this value
        "payload": {
          "type": "object",
          "required": [
            "quoteCode"
          ],
          "properties": {
            "quoteCode": {
              "type": "string",
              "example": "762",
              "title": "Quote Code"
            }
          }
        }
      }
    } 
  }
}

И мне нужно сопоставить значения из объектов json с javascript массив

Например:

MyArray = [
 {
   Label: “cust.created.v1”,
   Description:  "Customer Register Event v2"

 },
 {
   Label: “qu.orderplaced.v1”,
   Description: "Order Placed",
 }
]

Мне нужно сопоставить два значения, ключ => метка для каждого экземпляра (например, «cust.created. v1 ») и summary => Description из каждого экземпляра

Я пытался сделать это с помощью map , но мне было трудно сделать это с помощью ключа и свойства внутри, можно ли сделать это с помощью карты?

Ответы [ 4 ]

4 голосов
/ 16 июня 2020

Возьмите entries объекта и сопоставьте его:

var obj = { "api": "1.0.0", "info": { "title": "Events", "version": "v1", "description": "Set of events" }, "topics": { "cust.created.v1": { "subscribe": { "summary": "Customer Register Event v2", "payload": { "type": "object", "required": [ "storeUid" ], "properties": { "customerUid": { "type": "string", "description": "Email of a Customer", "title": "Customer uid" } } } } }, "qu.orderplaced.v1": { "subscribe": { "summary": "Order Placed", "payload": { "type": "object", "required": [ "quoteCode" ], "properties": { "quoteCode": { "type": "string", "example": "762", "title": "Quote Code" } } } } }}}

var result = Object.entries(obj.topics).map(([k,v])=>({Label:k, Description:v.subscribe.summary}));

console.log(result);
2 голосов
/ 16 июня 2020

Object.entries - ключ к вашей проблеме;)

Object.entries(obj.topics).map(topic => ({
    Label: topic[0],
    Description: topic[1].subscribe.summary
}))

Если вы не уверены, что topic [1] .subscribe, вы можете прикрыть свою спину topic[1].subscribe?.summary или topic[1].subscribe && topic[1].subscribe.summary

Вы также можете деструктурировать внутренние массивы Object.entries, может быть, это будет немного чище

const obj = { "api": "1.0.0", "info": { "title": "Events", "version": "v1", "description": "Set of events" }, "topics": { "cust.created.v1": { "subscribe": { "summary": "Customer Register Event v2", "payload": { "type": "object", "required": [ "storeUid" ], "properties": { "customerUid": { "type": "string", "description": "Email of a Customer", "title": "Customer uid" } } } } }, "qu.orderplaced.v1": { "subscribe": { "summary": "Order Placed", "payload": { "type": "object", "required": [ "quoteCode" ], "properties": { "quoteCode": { "type": "string", "example": "762", "title": "Quote Code" } } } } }}}

const arr = Object.entries(obj.topics).map(([Label, content]) => ({ 
   Label, 
   Description: content.subscribe?.summary 
}))

console.log(arr)
1 голос
/ 16 июня 2020

Так можно сделать

let obj = { "api": "1.0.0", "info": { "title": "Events", "version": "v1", "description": "Set of events" }, "topics": { "cust.created.v1": { "subscribe": { "summary": "Customer Register Event v2", "payload": { "type": "object", "required": [ "storeUid" ], "properties": { "customerUid": { "type": "string", "description": "Email of a Customer", "title": "Customer uid" } } } } }, "qu.orderplaced.v1": { "subscribe": { "summary": "Order Placed", "payload": { "type": "object", "required": [ "quoteCode" ], "properties": { "quoteCode": { "type": "string", "example": "762", "title": "Quote Code" } } } } }}}


let outputArray = Object.keys(obj.topics).map((key)=>(
    { Label: key, Description: obj.topics[key]['subscribe']['summary'] }
))

console.log(outputArray)
1 голос
/ 16 июня 2020

Вы можете сопоставить все ключи в темах, и для каждого из этих элементов вы можете извлечь любые данные из этого объекта следующим образом:

Object.keys(obj.topics).map((key) => { return {Label: key, Description: obj.topics[key].subscribe.summary} })
...