簡體   English   中英

在JSON對象中選擇值

[英]Pick values inside the JSON object

在我的應用程序中,我正在閱讀用戶感興趣的鍵的字典,然后僅返回那些在答復對象中的鍵。 用戶可以指定其他密鑰名稱。

當我僅傳遞JSON對象時,我的解決方案就可以工作。

     import * as _ from 'lodash';

     originalData = {
        "Cat" : "Cat Value",
        "Dog" : "Dog Value",
        "Rat" : "Rat Value"
     }

      transformMap = {
         "Cat" : "catData",
         "Dog" : "DogData"
      }

      let reply: any = {}
      let Keys = _.keys(transformMap)

      // Extract only the keys user wants.
      let filter = _.pick(originalData , Keys );
      if(!_.isEmpty(filter )) {
         Object.keys(filter).forEach(function (key) {
           reply[transformMap[key]] = originalData[key];
         });
      }    

為此,輸出為-

   reply= {
        "catData" : "Cat Value",
        "DogData" : "Dog Value"
     }

上面的代碼有效,但是當原始數據為array類型時,我想應用類似的功能-

    originalData = [
        {
          "Cat" : "Cat Value1",
          "Dog" : "Dog Value1",
          "Rat" : "Rat Value1"
        },
        {
           "Cat" : "Cat Value2",
           "Dog" : "Dog Value2",
           "Rat" : "Rat Value2"
        }
     ]

    reply= [
        {
          "catData" : "Cat Value1",
          "DogData" : "Dog Value1"
        },
        {
          "catData" : "Cat Value2",
          "DogData" : "Dog Value2"
        }
    ]

有兩種方法都能獲得結果嗎?

將“密鑰轉換器”打包成一個函數。 然后用靈活的輸入將其包裝。

function transformAnything(data, tranformMap) {
  const usingArray = data instanceof Array;

  const arrayData = usingArray ? data : [data];

  const transformedData = arrayData.map(
    objectData => tranformObjectData(objectData, tranformMap)
  );

  return usingArray ? transformedData : transformedData[0];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM