【问题标题】:converting 'malformed' java json object to javascript将“格式错误”的 java json 对象转换为 javascript
【发布时间】:2016-12-23 06:40:04
【问题描述】:

我有一个 Java JSON 对象,它的格式是 [{a=b}],我试图将此对象作为 JSON 对象传递给 javascript,但它在键和值上都缺少 " 以及 "= " 而不是 ":"

有没有一种简单的方法可以将此 JAVA JSON 对象转换为可供不同服务使用?

事实证明,解析非常复杂,因为实际的 JSON 是嵌套的,并且缺少引号和嵌套指示。

“JSON”数据示例:

[{wwnType=Virtual,serialNumberType=Virtual,connections=[], modified=2016-10-29T19:00:04.457Z, macType=Virtual, category=server-profile-templates, serverHardwareTypeUri=/rest/server-硬件类型/32006464-D3C6-4B4E-8328-47A193C6116C,bios={overriddenSettings=[],manageBios=false},firmware={firmwareBaselineUri=null,manageFirmware=false,forceInstallFirmware=false,firmwareInstallType=null},boot={ manageBoot=true, order=[CD, Floppy, USB, HardDisk, PXE]}, hideUnusedFlexNics=true, bootMode=null, state=null, affinity=Bay, localStorage={controllers=[]}, type=ServerProfileTemplateV1, status= OK,description=,eTag=1477767604457/1,serverProfileDescription=test,name=test,created=2016-10-29T19:00:04.428Z,enclosureGroupUri=/rest/enclosure-groups/e989621b-930e-40e7-9db0-a6ddbf841709 , uri=/rest/server-profile-templates/db1dbdcc-4237-4452-acc3-cf9dfdc75365, sanStorage={manageSanStorage=false, volumeAttachments=[]}}]

谢谢

【问题讨论】:

    标签: javascript java json parsing


    【解决方案1】:

    这并不简单。但是,我认为您可以在不编写成熟的解析器的情况下做到这一点,只要您愿意编写一个标记器或词法分析器,将您的输入字符串分解为标记。基本计划可能是这样的:

    1. 将您的输入转换为令牌列表。我不知道您输入的格式是什么,因此您需要自己进行分析。令牌类似于单个字符 []{}、逗号、=;或标识符(在您的示例中为ab,但我不知道可能的有效格式是什么);或者,可能是引号中的字符串文字,或数字文字,具体取决于您的需要。

    2. 遍历字符串并替换您需要的标记。根据您的示例,我会说在 {: 之后的第一个标记是标识符,请将其放在引号中;如果之后的第二个令牌是=,则将其更改为:;如果之后的第三个标记是标识符,请将其放在引号中。逗号后也是如此,但您需要跟踪逗号是对象中键值对列表的分隔符,还是数组中值列表的分隔符。为此,您可能需要保留一个堆栈,当您看到[{ 时推送,并在看到}] 时弹出,以便您知道您是在对象内部还是在数组。

    3. 替换完所有内容后,将标记重新连接在一起。结果应该是一个格式良好的 JSON 对象。

    这只是一个粗略的大纲,因为我真的不知道您的所有要求。您可能必须调整此答案以满足您的确切需求。但我希望这有助于您大致了解如何解决该问题。

    抱歉,我认为没有更简单的答案,除了您可能想研究解析器生成器(请参阅Yacc equivalent for Java)。我实际上没有看过 Java 中的任何内容,所以我不知道它们使用起来有多简单。请不要试图用正则表达式来解决整个问题。 (正则表达式对于将你的字符串分解成标记很有用,但是尝试使用正则表达式做更多的事情可能只会产生偏头痛。)

    【讨论】:

      【解决方案2】:

      我认为不是 json 对象。 json 对象应该是这样的。

      例子:

      JSONObject obj = new JSONObject();
      obj.put("a", "b");
      obj.put("name", "your name");
      

      输出:{"a":"b", "name":"你的名字"}

      传入javascript

      var obj = '{"a": "b", "name":"your name"}',
      var json = JSON.parse(obj);
      

      【讨论】:

      • 我认为你没有理解这个问题。
      猜你喜欢
      • 2018-11-04
      • 2021-07-27
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      相关资源
      最近更新 更多