解析并生成 JSON

2024-01-08

数学的内置格式列表 http://reference.wolfram.com/mathematica/guide/ImportingAndExporting.html相当广泛;然而,JSON 并不在该列表中。 Mathematica 中是否有用于生成和解析 JSON 的现有解决方案,或者我们是否必须推出自己的解决方案?


更新:正如 Pillsy 的回答所述,JSON 是 Mathematica 8 中导入和导出的内置格式:http://reference.wolfram.com/mathematica/ref/format/JSON.html http://reference.wolfram.com/mathematica/ref/format/JSON.html。但是,正如评论中所讨论的,从 Mathematica 10.4.1 开始,以下似乎是更强大的解决方案:

警告:这涉及执行 eval (ToExpression),因此不要使用它来解析来自不受信任来源的字符串。

首先,JSON 解析的一个真正快速但肮脏的部分解决方案是这样的:

ToExpression[StringReplace[json, {"["->"{", "]"->"}", ":"->"->"}]]

即,只需将方括号替换为大括号,将冒号替换为箭头,然后对其进行评估。 剩下的就是not在字符串内部进行这些替换。 (还需要对 null、true、false 和科学记数法进行更多替换。)

对于不在字符串内的问题,可能有一个更优雅的解决方案,但首先想到的是进行替换,例如"{"->"(*MAGICSTRING*){"然后,在 eval 之后(当字符串之外的注释消失时),反转这些替换。 (PS:稍后再回到这一点,我实际上对它的巧妙之处感到非常满意,而且它似乎非常强大。魔法弦 FTW!)

说起来容易做起来难,但以下 JSON 解析器似乎可以工作:

cat = StringJoin@@(ToString/@{##})&;          (* Like sprintf/strout in C/C++. *)
eval = ToExpression;            (* Mathematica function names are too verbose! *)

parseJSON[json_String] := With[{tr = {"["     -> "(*_MAGIC__[__*){",
                                      "]"     -> "(*_MAGIC__]__*)}",
                                      ":"     -> "(*_MAGIC__:__*)->",
                                      "true"  -> "(*_MAGIC__t__*)True",
                                      "false" -> "(*_MAGIC__f__*)False",
                                      "null"  -> "(*_MAGIC__n__*)Null",
                                      "e"     -> "(*_MAGIC__e__*)*10^",
                                      "E"     -> "(*_MAGIC__E__*)*10^"}},
  eval@StringReplace[cat@FullForm@eval[StringReplace[json, tr]], Reverse/@tr]]

(cat and eval是便利功能。简单地cat = ToString在这种情况下会起作用,但我喜欢这个更通用的版本,它将所有参数连接成一个字符串。)。

最后,这是一个生成 JSON 的函数(它确实需要更通用的cat,以及另一个以 JSON 合适的方式显示数字的实用函数):

re = RegularExpression;
jnum[x_] := StringReplace[
  ToString@NumberForm[N@x, ExponentFunction->(Null&)], re@"\\.$"->""]

genJSON[a_ -> b_]  := genJSON[a] <> ":" <> genJSON[b]
genJSON[{x__Rule}] := "{" <> cat @@ Riffle[genJSON /@ {x}, ", "] <> "}"
genJSON[{x___}]    := "[" <> cat @@ Riffle[genJSON /@ {x}, ", "] <> "]"
genJSON[Null]      := "null"
genJSON[True]      := "true"
genJSON[False]     := "false"
genJSON[x_]        := jnum[x] /; NumberQ[x]
genJSON[x_]        := "\"" <> StringReplace[cat[x], "\""->"\\\""] <> "\""
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析并生成 JSON 的相关文章

  • Android Volley 服务器错误

    I am posting data all strings to varchar variables in server but i am getting volley server error or badnetwork performa
  • Mathematica:如何获取plot命令绘制的数据点?

    当使用 Plot 绘制函数时 我想获取由 Plot 命令绘制的数据点集 例如 如何获取以下简单示例中使用的点 t f Plot 的列表 f Sin t Plot f t 0 10 我尝试使用一种将值附加到列表的方法 如 Jerry B Ke
  • Ajax 调用后使用 Django 模板呈现 JSON 对象

    我一直在尝试了解什么是最佳方法Ajax http en wikipedia org wiki Ajax 28programming 29 in Django http en wikipedia org wiki Django 28web f
  • 按日期对 JSON 进行排序

    我知道这一定相对简单 但我有一个 JSON 数据集 我想按日期排序 到目前为止 我每次都会遇到问题 现在我将日期存储为this lastUpdated 如果有帮助的话 我可以访问 jquery 但我意识到 sort 是本机 JS 提前致谢
  • Javascript“命名空间”和 jQuery AJAX

    我正在使用此处列出的建议 http www odetocode com articles 473 aspx http www odetocode com articles 473 aspx 使用模拟的JavaScript AJAX网络聊天系
  • Android 和 Facebook SDK:从 /me/picture 图形调用中解码图片

    编辑 Anwser 在这篇文章的末尾 我正在尝试通过内置的 Facebook SDK 功能获取 Facebook 用户的个人资料图片Request 我正在使用一个 me picture调用获取个人资料图片并将其转换为Bitmap 调用工作正
  • 将Json字符串映射到java中的map或hashmap字段

    假设我从服务器返回了以下 JSON 字符串 response imageInstances one id 1 url ONE two id 2 url TWO 杰克逊代码大厦 JsonProperty 我怎样才能得到HashMap对象出来了
  • 为什么 JSON.stringify() 接受 Date 对象?

    至少在 Firefox 中 您可以对 Date 对象进行字符串化 gt gt gt JSON stringify now new Date now 2012 04 23T18 44 05 600Z 这是有效的 因为 在 Firefox 中
  • Flot 0.8.2 折线图 - 颜色错误

    我正在使用 Flot 折线图并设置它们的颜色 我发现了一个奇怪的错误 在前 3 种颜色之后 绘图对所有其他线条使用最后一种颜色 这不是正确的行为 更有趣的是图例显示了正确的颜色 这是一个已知的错误 var dataSet label d1
  • 为数据集生成随机 JSON 结构排列

    我想生成 JSON 结构的许多不同排列作为同一数据集的表示 最好不需要对实现进行硬编码 例如 给定以下 JSON name smith occupation agent enemy humanity nemesis neo 应该产生许多不同
  • JSONDecodeError:额外数据:Python [重复]

    这个问题在这里已经有答案了 我使用以下代码从文件加载 json file file name obj list with open file as f for json obj in f obj list append loads json
  • 如何读取FTL文件中的JSONArray?

    我在我的 Java 文件中硬编码了以下 JSON 对象 JSONObject notificationInfoJson new JSONObject notificationInfoJson put title Payment Receiv
  • 无法将字符串解组为 int64 类型的 Go 值

    我有结构 type tySurvey struct Id int64 json id omitempty Name string json name omitempty I do json Marshal在 HTML 页面中写入 JSON
  • 将 swift 结构体转换为 json 字符串

    我正在尝试将我的 swift 结构转换为 json 格式 类似这样的问题似乎有不少 但到目前为止 没有一个解决方案对我有用 这是我的结构 struct Rec Codable var name String var time Int var
  • 与 Jackson 一起从 ASP.NET 反序列化日期

    我有一个 json 字符串 从 ASP NET Rest 服务返回 中的日期 如下所示 created Date 1277931782420 0700 杰克逊无法解析该日期 我可以编写自己的日期格式并将其传递给mapper getDeser
  • 在动态选项卡中网格时 JSON 数据不显示?

    我的网格在放入选项卡时不显示数据 该网格 存储 模型 JSON 在渲染到 body 或 div 或作为视口的一部分时起作用 只是放入选项卡时不显示 这也是使用 JSON 和 Tree 创建的 这是一个 有时 有效的示例 我不明白 也许范围错
  • 如何从 mysql 数据库中提取数据并使用 D3.JS 进行可视化?

    我有一个数据库MySQL我想在其中可视化D3 JS 为了做到这一点 首先我想parse中的数据JSON格式 然后编写一个基本代码 从数据库中提取数据并使用D3 JS 我环顾四周 但找不到我想要的东西 因为我是新手D3 JS 我怎样才能做到这
  • Express 不断将 request.body 获取为未定义的 JSON 对象

    我正在发出一个 Ajax 请求 如下所示 ajax url gen type POST data JSON stringify one 1 two 2 success function data console log this 我的快递部
  • 解析JSON数据并将其放入gridview中

    我正在开发一个应用程序 我必须在其中解析JSON数据并且必须将它们放入自定义中gridview 它应该是这样的 到目前为止 我已经在 asynctask 中解析了 JSON 数据并获取了这些值 这是我的代码 private class ge
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que

随机推荐