今天在工作过程中遇到需要解析JSON文件,得到其中的一个关键字,准备用Mathematica练练手,文件如下,需要解析"pubkey"这个字段。
{
"apiVersion": "v1",
"data": {
"voting-keystore.json": "{\"version\": 4, \"pubkey\": \"a94300da6d73a11d8ba72c99dd385b7a9d5043c9ee83ffd4190d89b7677e68d384fbceb556d2a0652e81250ad4b8477d\", \"uuid\": \"09e5c322-bf6b-401a-b90d-1aef6d57996a\", \"crypto\": {\"checksum\": {\"message\": \"704e947d244bc8020ef6d6f0844c4aea08af18ecf345bb98ab999df6441377d7\", \"function\": \"sha256\", \"params\": {}}, \"kdf\": {\"message\": \"\", \"function\": \"scrypt\", \"params\": {\"p\": 1, \"n\": 32768, \"salt\": \"b891518a06f1d3f67a6d485bba8627f5320497f98c08cb52e4391e50071ac97d\", \"dklen\": 32, \"r\": 8}}, \"cipher\": {\"message\": \"bcd85ce03e82e645e13501f717d907c03a23ee1f8dc6bd045c53001719ddc7a5\", \"function\": \"aes-128-ctr\", \"params\": {\"iv\": \"7f05ffce95bcd0157e520c6b949b90b1\"}}}, \"path\": \"\"}"
},
"kind": "ConfigMap",
"metadata": {
"creationTimestamp": "2020-07-25T11:35:24Z",
"managedFields": [
{
"apiVersion": "v1",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:data": {
".": {},
"f:voting-keystore.json": {}
}
},
"manager": "Swagger-Codegen",
"operation": "Update",
"time": "2020-07-25T11:35:24Z"
}
],
"name": "lighthouse-validator-a94300da6d73",
"namespace": "eth",
"resourceVersion": "1200502",
"selfLink": "/api/v1/namespaces/eth/configmaps/lighthouse-validator-a94300da6d73",
"uid": "05b37640-be81-4944-9c9f-868431b6107f"
}
}
使用wolfram语言一行搞定:
代码中使用了Mathematica的核心准则,Rule法则 /.
Rule(->)
比如 {x, x^2, a, b} /. x -> 3 可以得到: {3, 9, a, b}
(* writeKey["/tmp/json.file", "/tmp/1.txt"] *)
writeKey[srcfile_String, destfile_String] :=
With[{openfile = File[destfile]},
WriteString[openfile, "pubkey" /. ImportString[
"voting-keystore.json" /. ("data" /. Import[srcfile, "JSON"]),
"JSON"]]]
假设我们有一堆json文件,并且我们需要解析其中的关键字,并将这些关键字存储在一个文件中,我们同样可以使用一行代码搞定。
writeKey[#, "/tmp/keys.txt"] & /@ FileNames[All, "/tmp/keys"];
当我们在讨论某个语言的时候,我们都会讨论这个语言的特性,优点和缺点,但是我只想说能够带来生产力的语言才是值得讨论的,你需要去实现一个功能完成某个任务,时间才是最宝贵的,技术其次,一门语言能够让你在短时间内提升自己的工作效率从而带来更多的收益,那么即使他的性能差一点也比无法提高效率的语言要好很多,Wolfram Language就是这样的语言。