Axios的toJSON方法无法正确处理Set,

chhkpiq4  于 5个月前  发布在  iOS
关注(0)|答案(5)|浏览(88)

描述问题

我们使用open api规范。在我们模型中有一个带有"uniqueItems: true"的数组属性。当我们生成这个模型时,它会创建一个类型为Set的JavaScript对象。当我们想把这个模型发送到api时,Set似乎在转换过程中丢失了。我已经将问题缩小到了toJSONObject方法。我修改了以下单元测试:
should convert to a plain object without circular references (请参阅下面的改进版本代码片段)
结果显示了一个空集合{},我认为这是不正确的。

重现问题

要么用我提供的示例替换单元测试 should convert to a plain object without circular references 并注意到它失败。或者创建一个包含Set的模型,并尝试将其放入后端(或模拟)并注意到Set没有正确发送(它被发送为空,{})。

代码片段

it('should convert to a plain object without circular references', function () {
      const obj= {a: [0]}
      const source = {x:1, y:2, obj};
      source.circular1 = source;
      obj.a[1] = obj;
      obj.b = new Set(['a', 'b']);

      assert.deepStrictEqual(utils.toJSONObject(source), {
        x: 1, y:2, obj: {a: [0], b: ['a', 'b']}
      });
    });

预期行为

我希望能够向后端/api发送/放入一个Set(具有唯一元素的数组)。

Axios版本

1.5.0

适配器版本

json

浏览器

Chrome

浏览器版本

n.a.

Node.js版本

16.14.2

OS

osx 13.5.2

其他库版本

  • 无响应*

其他上下文/截图

  • 无响应*
ycggw6v2

ycggw6v21#

我想处理这个问题并努力解决它。你能把它交给我吗?

1wnzp6jl

1wnzp6jl2#

我认为这个问题的原因是,默认情况下,当将Set作为参数传递给JSON.stringify和utils.toJSONObject方法时,它们都会返回一个空对象。

通过在Set对象上使用...(扩展运算符)将Set转换为数组,并用方括号将结果包围起来,使其成为一个数组,可以解决这个问题。

pqwbnv8z

pqwbnv8z3#

我想要在这个项目上工作。

drnojrws

drnojrws4#

我可以处理这个问题吗?

ijxebb2r

ijxebb2r5#

请不要忘记可能存在的嵌套问题。以下是修复后的pull请求:#6111

相关问题