公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+1 投票
1.1k 浏览

新功能感觉缺个功能。

数据是这个,json格式的。

od = Import["http://www.lolking.net/summoner/na/69000113#matches", 
   "Text"];
gamesStart = StringPosition[od, "[{\"match\":"][[1, 1]];
gamesEnd = StringPosition[od, ",\"replay_href\":\"\"}];"][[1, 2]] - 1;
js = ImportString[StringTake[od, {gamesStart, gamesEnd}], "JSON"];

 

js就是我的数据啦。但是都是{->}这样表示的,好像不太方便调用。

希望变成最新的Association,然后整理起来方便嘛。

但是Association[js[[1]]]只能搞出一层,我想递归地进行。

AssociationMap,Map,Apply反正各种东西都试了,没有想要的效果,想要的效果就是

StringReplace[ToString[js], {"{" -> "<|", "}" -> "|>"}]

但是不是String格式的。

如何做呢?

用户: flumer (161 分)
js /. List -> Association?
ImportString[StringTake[od, {gamesStart, gamesEnd}], "RawJSON"]

1个回答

+3 投票
 
已采纳
Needs["GeneralUtilities`"];

ToAssociations@js

其他方法有可能存在的问题:

js/.List->Association

会合并相同key的元素,只留下第一条(我还被这个坑过),比如这个例子下很多个match就只剩下第一个了,而内置的函数会变成list of associations来回避这个问题。还有就是某些json会有a->{1,2,3}这样的结构,如果那样替换就会变成a->Association[1,2,3]。而且由于Association是atomic,换过去之后就不能再通过pattern matching换回来了

用户: happyfish (1.8k 分)
采纳于 用户:flumer
哈哈,把这个忘了
就是我想要的!但是想问一下您是如何知道这个包有这个东西的?
needs之后Names["GeneralUtilities`*"]然后就大概知道有啥了,然后可以Information@symbol看说明或者是定义
...