刚开始使用JSON参考库(http://docs.oracle.com/javaee/7/api/javax/json/package-summary.html)编写一些代码,并遇到一个简单的问题。用一个简单但“丑陋”的解决方案。Java-EE 7 Json规格 - 读/写功能?
JsonObjects是'不可变的',尽管有一个Map类的支持,这意味着我不应该修改它们。
我想非常动态地构造一个对象,比如说,接受一个数组并为它添加一个元素,一个完整的“读/写”模型。但是JsonObjectBuilder似乎实现了“只写”接口 - 你可以把东西放在那里,但你永远不会读它们(不会继承map或任何东西?),所以如果你把一个ArrayBuilder放入在那里,如果你以后想要添加它,你必须跟踪它(因为没有办法'读'阵列构建器退出......)
所以接缝是两个接口,一个是只读,一个是只写,唯一可能的转换是只写到只读,没有退路,也没有办法读/写JSON结构。
我觉得我失去了一些东西很明显...
明显的“脏”的解决办法当然是将数据存储在自己的结构,然后将其转换为JSON建设者在构建时,寿这对于需要对其进行修改并将其传递给JSON的接收器并没有什么帮助。我的对象和它之间的双向接口,或转换器只读json's(递归地)返回到构建器并在此过程中修改它...
我错过了什么?为什么我似乎必须构建自己的JSON表示并将其流入和导出RO/WO模型?
(是的,我曾尝试使用Google,什么我想出了是有帮助的,这进一步混淆我...)
嗨,哟,怕没太大用处。我打算构建一个基本上是大型组件链,现在所有的java,并且大多是“本地”的系统,但最终远程任务可以加入其他语言...... JSON似乎是一种很好的“消息格式” ,灵活的等等......除了能够本地处理动态的JSON对象,在一天结束时的大问题似乎是这样的: 如果我收到一条JSON消息,而我的工作只是添加一个元素到某处然后传递JSON消息,为什么我不得不解构整个数据结构并重建? – iain
感谢您回复寿,没有人甚至设法说“是的,不行!”。我在另一种语言(第二人生的LSL)中使用了JSON,其中原生数据结构非常糟糕,实际上只是在JSON中存储“状态”,因为它传递的代码部分非常好,在已经传递的系统中它在很多代码,系统和语言之间,为什么要反序列化/连续两次? “序列化表单” - > JSON对象表单 - >我的数据结构 - > JSON生成器 - >序列化表单。我只能在“我的数据结构”中进行修改。看起来故意效率低下。 – iain
(特别是,如果我必须编写自己的代码,将JSONObjects解密到/解密到我的数据类中,然后将它们重新编码为JSONBuilder,仅用于使用其序列化/反序列化......并且它的内部数据结构就是我需要的一切,建立这样一个转换器接口的唯一原因是因为我被迫......没有关于我从这一步获得的设计好处,我间接实现了相同的目标,所以最终目标不能实现是“不可能的错误”......所以为什么这么强制) – iain