【问题标题】:How can I retrieve value from a string of list of map如何从地图列表中检索值
【发布时间】:2021-08-02 04:31:27
【问题描述】:

我有一些要求,比如我需要从地图中获取值,实际上格式如下:

"{xyz=True, abc=asd-1123, uvw=null}"

从该映射中获取字符串中的值。

我尝试使用JSON.parse("{xyz=True, abc=asd-1123, uvw=null}"),也尝试使用var map = new Map(JSON.parse("{xyz=True, abc=asd-1123, uvw=null}"))

但无论如何它都不起作用

【问题讨论】:

  • 这是无效的 json,无效的 javascript,除了一个常量字符串之外,您没有指定任何内容,所以我认为这既难做,也更难回答。
  • 嗯,它不是有效的 JSON,所以这并不奇怪。为什么字符串是那种格式的?它来自哪里?
  • 我正在使用 java 服务器端代码中的session.setAttribute() 在会话中设置地图,然后尝试从 js 文件中获取此值。即使我是从 JS 中的会话中得到的,也很难检索到这些值。
  • 1.在服务器端将该值编码为 JSON。 2. 在客户端解析 JSON。 3. 完成。

标签: javascript jquery angularjs user-interface


【解决方案1】:

首先,json.parse 不会工作,因为它不是有效的 json。您将需要自己进行解析。因此,假设一切都在该方法中始终如一,您应该首先去掉花括号,然后分解您的值并根据这些值创建您的地图。

举个例子:

let map = new Map(); // or create an object: {}, because you can get values using Object.values(yourObject)
let mapStr = "{xyz=True, abc=asd-1123, uvw=null}".slice(1, -1);
let kvp = mapStr.split(', ');
for(let i = 0; i < kvp.length; i++) {
   let splitVal = kvp[i].split(=);
   map.set(splitVal[0], splitVal[1]);
}

然后你就可以使用你创建的地图对象了。

考虑到这一点,假设您的所有键值对都没有“=”符号。您还可以进一步研究正则表达式以生成您的地图。无论哪种方式,除非已经存在一个可以为您执行此操作的库,否则您可以进行映射:)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2020-04-11
  • 1970-01-01
  • 2021-04-20
相关资源
最近更新 更多