研究了下内置的 encoding/json,以及流行的第三方 JSON 库 jsonitor,还在 github 上搜了搜,基本没找到有这个功能。
别告诉我可以先 Unmarshall 到 map[string]interface{}中再 Marshall,或者直接操作裸[]byte,这根本不是“真正”的解决办法。
![]() | 1 B1ankCat 2020-07-30 09:27:41 +08:00 ![]() |
![]() | 2 rrfeng 2020-07-30 09:29:35 +08:00 via Android 你告诉我哪种语言可以不 unmarshal 就能加 key 的? |
![]() | 3 StarUDream 2020-07-30 09:31:01 +08:00 来了来了,他来了 |
4 yemoluo 2020-07-30 09:31:15 +08:00 真的是老鼠精的洞府 |
![]() | 5 nigelvon 2020-07-30 09:37:53 +08:00 ![]() 序列化后的数据一般都是反序列化之后再修改吧,哪有能直接修改序列化数据的。 |
![]() | 6 1069401249 2020-07-30 09:42:12 +08:00 ![]() 世界上最好的语言 PHP 都没有这个 api |
7 pengjay 2020-07-30 09:43:25 +08:00 封装成一个函数不就有 API 了 |
8 tcfenix 2020-07-30 09:43:52 +08:00 ![]() 你想不 Unmarshall 解决问题? 办法有啊! 你手里拿着 byte array,然后通过你多年编程的经验,猜出来具体需要添加的位置是哪个地方,然后把你的 kv 插进这个位置, 你看这样不就好了? |
![]() | 9 guonaihong 2020-07-30 09:44:29 +08:00 ![]() |
![]() | 10 darksword21 PRO 直接机器码编程 |
11 tcfenix 2020-07-30 09:45:41 +08:00 想了想还真的可行啊,如果就添加在最外层的话,直接 从<}">的位置前面插就好了 哈哈哈哈哈哈,给 官方库提个 mr 吧 |
![]() | 12 zzzmj 2020-07-30 09:47:35 +08:00 黑人问号脸 |
![]() | 13 Vegetable 2020-07-30 09:48:05 +08:00 真滴秀,JSON 在编程语言里不都是二等公民吗,都不是原生数据对象,当然要现转换才能修改啊 |
![]() | 14 gowk 2020-07-30 09:48:46 +08:00 水贴、已 B 、不送 |
15 deplives 2020-07-30 09:48:49 +08:00 最近钓鱼贴越来越多了哈 |
16 scnace 2020-07-30 09:51:05 +08:00 via Android sjson 可以干这事,自己不会搜索不要怪社区(还有标准库为啥要提供这种 JSON path ?不符合大道至简啊 |
![]() | 18 janxin 2020-07-30 09:59:36 +08:00 楼主技术太差,下一个问题 |
19 woodongwong 2020-07-30 10:10:15 +08:00 @guonaihong /大拇指 |
![]() | 20 lxml 2020-07-30 10:23:12 +08:00 via Android ![]() 谁说 go 没有,你直接拿到[]byte 的指针,用 unsafe 按着头往里面写不就完事了 |
![]() | 21 qW7bo2FbzbC0 2020-07-30 10:24:38 +08:00 ![]() 大概是指想要 python 字典那种便捷操作吧。 但即使在 python 中严格来说 json 串指的是 json.dumps(dict)后的结果,而不是 dict 。 强类型语言似乎没有办法快捷的给 class 或者 struct 加属性或者字段。 不知道利用反射可不可以,但是利用反射加字段让代码看起来像是起了一个脓包 |
![]() | 22 tidyoux 2020-07-30 10:28:15 +08:00 |
![]() | 23 reus 2020-07-30 10:34:15 +08:00 ![]() |
![]() | 24 moka20477 2020-07-30 10:37:38 +08:00 你有发帖这时间都已经封装完函数了 |
![]() | 25 damngood 2020-07-30 10:38:07 +08:00 啊,你们说的生态就是这种呀... 难道不管什么功能都要有个外部依赖库来做的吗... 这种东西自己弄一下也不用费什么力气的吧. |
![]() | 28 yuzo555 2020-07-30 11:30:40 +08:00 简单啊,如果 JSON 是标准非空无空白的,直接在倒数第二个字符串位置(“}”之前)插入: ,"key":"alue" 就行了。 但真没必要,不差这个解析和转换的内存和时间 |
![]() | 29 InkStone 2020-07-30 11:44:26 +08:00 楼上那么多回复让我怀疑 Java 是一门小众语言 楼主说的不就是 Java JsonObject 那样的专用 JSON API 么 |
![]() | 32 fengyj 2020-07-30 12:57:14 +08:00 建议你去用动态脚本语言写,比如 Javascript 这喷得好奇怪。 |
33 Jooooooooo 2020-07-30 13:00:07 +08:00 建生态的机会来了 |
![]() | 35 wangritian 2020-07-30 13:18:39 +08:00 你不分析怎么知道一坨字符串里面包含什么东西?你怎么就确定它是 map[string]interface{}? |
36 sonxzjw 2020-07-30 13:21:09 +08:00 已 block 不送 |
![]() | 37 ClarkAbe 2020-07-30 13:22:03 +08:00 via iPhone ??? json 的老爸 js 想操作他都得转实体,要么自己封装要么爱用用不缺你一个 |
38 CharlotteLi 2020-07-30 13:39:56 +08:00 我咋感觉楼主是来钓解决方案的,和 300 元以内的耳机都是辣鸡一样。 |
![]() | 39 allenhu 2020-07-30 13:48:32 +08:00 via Android 话说 map[string]interface{}相当倒胃口 |
![]() | 40 pythonee 2020-07-30 14:11:22 +08:00 撸起袖子干 |
41 onikage 2020-07-30 14:17:56 +08:00 楼上的能人不少啊, 楼主只是吐槽不方便, 这么多人都知道这问题也不见人提交, 有人提出这问题就在这说风凉话, 还 tm 钓鱼, 自己钓鱼习惯了吧? 还是难得找到个机会要显摆自己一下? |
![]() | 42 johnnyNg 2020-07-30 14:19:38 +08:00 json 在 js 中算一等公民了,也得先 parse 再操作 |
![]() | 43 j0hnj 2020-07-30 14:25:59 +08:00 ![]() @onikage #41 是楼主提问方式的问题,明明可以说 "请问一下大家,Golang 中是否存在直接往 JSON 中追加新的 key/value 的 API ?",非得上来喷一句,这样不被喷才怪了 |
![]() | 45 duanquanyong 2020-07-30 15:01:14 +08:00 https://github.com/tidwall/sjson 这不是吗? 你上来不问有没有,自己找不到就得出结论说生态差? |
![]() | 46 wleven 2020-07-30 15:05:19 +08:00 用 map 呗 处理完再序列化 |
47 Chenamy2017 2020-07-30 15:09:17 +08:00 请教问题就请教问题,别到处扣帽子。没有一个生态是完美的。 |
![]() | 48 TypeError 2020-07-30 15:46:33 +08:00 via Android 先学会提问 |
![]() | 49 haosamax 2020-07-30 15:49:03 +08:00 这个问题,他是个问题吗? |
![]() | 51 RubyJack 2020-07-30 17:51:57 +08:00 ![]() 水平太差 建议转行写 js |
![]() | 52 airplayxcom 2020-07-30 18:06:12 +08:00 via iPhone 引战帖 告辞 |
![]() | 53 ihciah 2020-07-30 18:20:54 +08:00 ![]() 正确的提问姿势 |
![]() | 54 est 2020-07-30 18:29:22 +08:00 ![]() 气的这么多人都直接贴了库的网址。。。果然是正确的提问姿势 |
![]() | 55 kinghui 2020-07-30 18:30:41 +08:00 ![]() 大概还不太知道啥是 JSON,下面都是合法的 JSON 字符串 - "1" - "\"s\"" - "true" - "1.1" - "[1.1]" - "{\"key\": \"value\"}" |
![]() | 56 yujiff 2020-07-30 18:31:25 +08:00 路过。。。 |
57 haleyao 2020-07-30 18:35:39 +08:00 ![]() 楼主平安 回复者平安 V2EX 平安 |
![]() | 58 winglight2016 2020-07-30 19:52:35 +08:00 几年前刚开始接触 go,我也被这问题难住了,marshal 来 unmarshal 去,现在我用 python/js,已经看不懂 lz 的问题是啥了。。。 |
59 yangbonis 2020-07-30 19:58:05 +08:00 via iPhone 临时用用的话,jq 不舒服吗 |
60 fancy2020 2020-07-30 21:53:39 +08:00 v 站上越水的帖子越能火... |
61 vc1 2020-07-30 21:58:44 +08:00 via Android ![]() 学到了,原来这才是提问的正确姿势,回复里的解决办法真不错 |
![]() | 62 merin96 2020-07-30 23:19:53 +08:00 https://github.com/Vonng/ddia/blob/master/ch4.md#%E7%BC%96%E7%A0%81%E6%95%B0%E6%8D%AE%E7%9A%84%E6%A0%BC%E5%BC%8F 为什么要 marshall/unmarshall,这一节我感觉说得挺清楚的 |
![]() | 63 tikazyq 2020-07-30 23:20:49 +08:00 为啥不直接用 struct ?静态语言用动态的方法写,感觉有些反模式 |
64 billlee 2020-07-30 23:29:11 +08:00 SAX 风格的库就可以不做反序列化,C++ 和 Java 的主流库都是支持的吧 |
![]() | 65 WilliamYang 2020-07-31 00:07:29 +08:00 这才是正确的提问方式,下次想问问题的朋友可以参考一下 |
![]() | 66 lslqtz 2020-07-31 03:51:18 +08:00 ![]() 这样的提问方式确实好,就是容易被 b |
![]() | 67 abowloflrf 2020-07-31 09:09:37 +08:00 via iPhone 甚至觉得楼主是来黑 golang 的 |
![]() | 68 vipppppp 2020-07-31 09:34:34 +08:00 |
69 JokeFunny 2020-07-31 09:44:55 +08:00 这是来搞笑的吧 |
![]() | 70 jimages 2020-07-31 09:48:07 +08:00 学习了正确的提问方法 |
![]() | 72 Carlgao 2020-07-31 10:50:46 +08:00 楼主一边挨着骂一边偷笑,自己搜个锤子,这不就有解决方案了吗 |
![]() | 74 prenwang 2020-07-31 11:19:59 +08:00 楼主你好牛 |
![]() | 75 wdlth 2020-07-31 23:50:14 +08:00 建议先去把 RFC 4627 了解清楚,JSON 不一定是有 Key 的对象,可能是数组,甚至只是一个 null 或者 false,到时候你怎么插呢? |
76 Balthild 2020-08-02 23:13:31 +08:00 via iPhone 提问时老老实实遵守《提问的智慧》:问题看起来很好看然而无人问津 直接抛出一个错误答案:跑出一大堆人用正确回答“教育”自己 |
77 qingsonghe 2020-08-03 20:54:38 +08:00 使用 map[interface{}]interface{}解决问题 |
78 cbasil 2020-08-13 09:24:36 +08:00 php 都需要 json_decode 将 json 转换成数组或者对象后才能修改数据,改完后再 json_encode 回去 |
![]() | 79 liuyexing 2020-12-04 16:25:55 +08:00 |