当前位置: 首页 > 知识库问答 >
问题:

你怎么看JSON。将ES6地图字符串化?

商业
2023-03-14

我想开始使用ES6Map而不是JS对象,但我被耽搁了,因为我不知道如何JSON。stringify()aMap。我的键保证是字符串,我的值将始终列出。我真的需要编写一个包装器方法来序列化吗?

共有3个答案

何辰沛
2023-03-14

你不能。

地图的关键点可以是任何东西,包括对象。但是JSON语法只允许字符串作为键。所以在一般情况下是不可能的。

我的键保证是字符串,我的值将永远是列表

在这种情况下,可以使用普通对象。它将具有以下优点:

  • 它将能够字符串化为JSON
  • 它将在较旧的浏览器上工作
  • 它可能更快
丁子石
2023-03-14

您不能直接对Map实例进行字符串化,因为它没有任何属性,但您可以将其转换为元组数组:

jsonText = JSON.stringify(Array.from(map.entries()));

相反,使用

map = new Map(JSON.parse(jsonText));
山阳辉
2023-03-14

JSON. stringify和JSON. parse都支持第二个参数。通过下面的替换器和复兴器,可以添加对本地地图对象的支持,包括深度嵌套的值

function replacer(key, value) {
  if(value instanceof Map) {
    return {
      dataType: 'Map',
      value: Array.from(value.entries()), // or with spread: value: [...value]
    };
  } else {
    return value;
  }
}
function reviver(key, value) {
  if(typeof value === 'object' && value !== null) {
    if (value.dataType === 'Map') {
      return new Map(value.value);
    }
  }
  return value;
}

用法:

const originalValue = new Map([['a', 1]]);
const str = JSON.stringify(originalValue, replacer);
const newValue = JSON.parse(str, reviver);
console.log(originalValue, newValue);

结合阵列、对象和贴图的深度嵌套

const originalValue = [
  new Map([['a', {
    b: {
      c: new Map([['d', 'text']])
    }
  }]])
];
const str = JSON.stringify(originalValue, replacer);
const newValue = JSON.parse(str, reviver);
console.log(originalValue, newValue);
 类似资料:
  • 我有一对看起来像 第二个元素是一个字符串,我从函数get()从http://alvinalexander.com/scala/how-to-write-scala-http-get-request-client-source-fromurl.这里是函数: 现在我想把这个字符串转换成json,从中获取图片url。(来自此)https://stackoverflow.com/a/38271732/14

  • 主要内容:1.ES6字符串属性,2.ES6字符串方法,3.JavaScript字符串方法JavaScript字符串是一个代表字符序列的对象。 通常,字符串用于保存基于文本的值,例如人名或产品说明。在JavaScript中,单引号或双引号内的任何文本均视为字符串。 有两种方法可以在JavaScript中创建字符串: 通过使用字符串文字 通过使用字符串对象(使用关键字) 下面来看看如何使用这两种方法在JavaScript中创建字符串。 通过使用字符串文字 可以使用双引号或单引号来创建字符

  • ES6引入了一种通过反引号( ` )标记的新的字符串文字类型。 这些字符串文字可以包括换行符,并且有一个新的机制用于将变量插入字符串:

  • 问题内容: 如何将一个JSON.stringify()一集? 在Chromium 43中不起作用的事情: 我希望得到类似于序列化数组的东西。 问题答案: 不能直接与集合一起使用,因为存储在集合中的数据不会存储为属性。 但是您可以将集合转换为数组。然后,您将能够正确地对其进行分类。 以下任何一项都可以解决问题:

  • 问题内容: 给定一串JSON数据,如何安全地将该字符串转换为JavaScript对象? 显然,我可以使用类似的方法不安全地执行此操作: 但这使我容易受到包含其他代码的JSON字符串的影响,仅进行评估似乎很危险。 问题答案: 只要您可以保证使用合理的现代浏览器,它就是一种纯JavaScript方法。