【问题标题】:JSON.stringify() vs array.join(',')JSON.stringify() 与 array.join(',')
【发布时间】:2019-11-12 19:00:59
【问题描述】:

Angular 6 中,我使用myString.join(',') 将一组ID 连接成一长串以逗号分隔的ID。

当我将它发送到.NET Web API 时,我注意到只有一个值,即第一个 ID,正在被发送。然后我通过将myString.join(',') 更改为JSON.stringify(myString.join(',')) 在前端修复了这个问题。现在,在 API 上,所有 ID 都已成功发送。

我想知道这是为什么。我知道数据需要通过JSON 发送,但是JSON 字符串和.join(',') 构建的前端Typescript 字符串有什么区别?我有点期待普通的.join() 可以工作,因为它是一个字符串。

【问题讨论】:

    标签: javascript json string asp.net-web-api serialization


    【解决方案1】:

    array.prototype.joinJSON.stringify 都返回简单的字符串。因此,您应该能够通过控制台记录这两者并找到您输入的区别。

    最有可能的是它的引号。 JSON.stringify(string)string 包裹在引号 " 中并转义现有的引号。

    let s = '""yo i already have many quotes"""';
    let j = JSON.stringify(s);
    console.log(s);
    console.log(j);

    let ids = [123, 516];
    let idsJoin = ids.join(',');
    let idsJson = JSON.stringify(idsJoin);
    
    console.log(ids);
    console.log(idsJoin);
    console.log(idsJson);

    【讨论】:

    • 啊,你是对的。我的 ID 日志数组为 [ID1, ID2],myString.join(',') 日志为 ID1, ID2 和 json.stringify(myString.join(',')) 日志为 'ID1, ID2'。所以我想我需要两者。谢谢@Junvar
    • 我很惊讶 myString.join(',') 没有用引号括起来,因为它应该是一个字符串,对吧?这是为什么呢?
    • ['a', 'b', 10, true].join(',') 返回字符串 "a,b,10,true"。它既不添加空格,也不将字符串括在引号中,因为这不是它的目的。我认为您将 returns a stringwraps in quotes 混淆了,这是两个不同的操作。字符串可以存在而不用引号括起来,例如'hello' v '"hello"'.
    • 是的,在这种情况下它们会产生相似的结果,但是当您不从概念上分离它们时,很容易混淆,正如这个问题所表明的那样。序列化不应用于连接,反之亦然。相反,根据您要完成的任务选择正确的工具
    猜你喜欢
    • 2011-05-23
    • 2010-10-03
    • 2016-06-03
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多