【问题标题】:convert promise JSON return in a array of objects在对象数组中转换 promise JSON 返回
【发布时间】:2022-01-20 16:30:58
【问题描述】:

我的 promise 返回一个像这样的 JSON:

‘[ {"amazing data": "hello", "amazing again": "yep"}, {"amazing data": "hello", "amazing again": "yep"}]’

我只想返回一个对象数组:

[
 {"amazing data": "hello", "amazing again": "yep"},
 {"amazing data": "hello", "amazing again": "yep"}
]

我想以这种方式访问​​它,因为我可以在 promise 返回后使用 reduce。

我的代码:

const amazingPromise = await getData().then((data) => {
   return data
})


const prodArray = Array.from(amazingPromise.reduce((acc, o) => {
    Object.entries(o)
      .forEach(([k, v]) => {
        if(!acc.has(k)) acc.set(k, [k])
        
        acc.get(k).push(Array.isArray(v) ? v.join(' | ') : v)
      })
    
    return acc
  }, new Map()).values())

任何帮助都会很棒。谢谢。

【问题讨论】:

  • 为什么你的 promise 返回的是一串东西而不是实际有效的 JSON?您的输出也无效。
  • 读取字符串,检测}并将其附加到您的数组中..等等,直到您完成读取字符串,然后您可以将json对象解析为测试
  • 我编辑了这个问题。承诺返回一个 JSON 有效的 obj。
  • 这不是有效的 JSON。 JSON 要求所有字符串都用双引号引起来,包括对象键。
  • 如果你复制错了,而且它是真正有效的 JSON,请使用JSON.parse()

标签: javascript arrays promise


【解决方案1】:

如果你的项目是一个 Web 项目,你可以使用 react.State() 来解决这个问题。 例如,在我的项目中,我使用状态来保存 API 请求的结果,就像您的示例一样。

const App = ()=>{
    const[array, setArray] = useState([]); //Init the array as a empty array
    
    useEffect( ()=>{
      const RequestAPI = async ()=>{
           const URL = "https://...";
           const response = await fetch(URL);
           const newArray = await response.json();
           setArray(newArray);
      };
      RequestAPI();
     },[]);
     
    return (
      {array.map(item => <ComponentItem /> ) }
}

尽可能在项目中使用类似于 state 和 async 函数的东西

【讨论】:

    猜你喜欢
    • 2016-08-31
    • 2013-04-19
    • 1970-01-01
    • 2019-12-09
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2015-03-08
    相关资源
    最近更新 更多