如何正确循环来自websocket的JSON消息?

问题描述 投票:0回答:3

我需要遍历从WebSocket接收的五种不同类型的JSON消息,并启动适当类型的函数以对mobx中的observable进行更改。有帮助吗?

例如,简单消息如下所示:

{ 
    name: asd, 
    prefernces: { 
        pref1:fried fish, 
        pref2:fish sticks 
    }, 
    resident:true
}

要么:

{ prevHistory: [
   {
     healthIssues: none,
     isOnLifeSupport:false,
   },
]        

试着像这样做

          for (const prop in data) {
                 if (data.hasOwnProperty(prop)) {
             return keyNames[prop];
         } 

keyNames是一个带有键的对象,可以将我链接到所需的函数。但是Eslint说我不应该用于... in。

目前正在使用它,它可以工作,但它的sh * tty代码。

    Object.entries(data).forEach(([key, value]) => {
        value === name && someFunc();
        value === preferences && getPref();
        value === resident && isResident();
        value === prevHistory && getHistory();
    });

任何提示如何使用Array.prototype.map()解决它?

javascript json reactjs websocket mobx
3个回答
0
投票

你可以用这种方式迭代你的json:

json = { "name": "asd", "prefernces": { "pref1":"fried fish", "pref2":"fish sticks" }, 
   "resident":true}

for (var key in json) {
  console.log(json[key])
  if(key == 'type' && json[key] == 'value'){
     applyFunction(...)
   }
}

0
投票

如果你需要采取行动取决于你收到的对象的架构,也许你可以做类似的事情

if ('name' in myObj && 'preferences' in myObj)
  // Do something with this type of object
else if ('prevHistory' in myObj)
  // Do something with this other type of object

0
投票

您可以定义将每个属性映射到特定函数的映射对象,这样您就可以从一个对象中看到所有映射函数。

const map = {
    name: (name) => {},
    preferences: (prefs) => {},
    resident: (resident) => {},
    prevHistory: (history) => {}
}

然后你只需枚举你的响应对象

Object.entries(response).forEach(([key, value]) => {
    var func = map[key];
    if (func) {
        func(value);
    }
});

通过这种方式,您可以清楚地了解将在地图中定义的每个响应属性调用的所有映射。

© www.soinside.com 2019 - 2024. All rights reserved.