我有一个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- hardware-types / 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 = []}}]
由于
答案 0 :(得分:1)
这不会很简单。但是,我认为只要您愿意编写一个tokenizer或词法分析器来将输入字符串分解为标记,就可以在不编写完整的解析器的情况下完成此操作。基本计划可能是这样的:
将您的输入转换为令牌列表。我不知道您输入的格式是什么,因此您需要进行自己的分析。令牌可以是单个字符[
,]
,{
,}
,逗号,=
;或您的示例中的标识符(a
或b
,但我不知道可能的有效格式是什么);或者,可能是引号中的字符串文字或数字文字,具体取决于您的需求。
浏览字符串并替换您需要的标记。根据您的示例,我在{
之后说:如果之后的第一个标记是标识符,请将其放在引号中;如果之后的第二个令牌是=
,请将其更改为:
;如果之后的第三个标记是标识符,则将其放在引号中。逗号后也可以如此,但是您需要跟踪逗号是否是对象中键值对列表的分隔符,或者是数组中的值列表。为此,当您看到[
或{
时,您可能需要保留一个推送的堆栈,并在看到}
或]
时弹出,以便了解是否你在对象或数组中。
在您更换完所有内容后,将令牌连接在一起。结果应该是格式良好的JSON对象。
这只是一个粗略的概述,因为我真的不了解你的所有要求。您可能需要调整此答案以满足您的确切需求。但我希望这有助于您如何解决问题。
很抱歉,我不认为这是一个更简单的答案,除了您可能想要查看解析器生成器(请参阅Yacc equivalent for Java)。我实际上并没有用Java看过,所以我不知道它们的使用有多么简单。请不要试图用正则表达式解决整个问题。 (正则表达式对于将字符串分解为标记非常有用,但尝试使用正则表达式进行更多操作除了偏头痛之外什么都不会产生。)
答案 1 :(得分:0)
我认为不是json对象。 json对象应该是这样的。
示例:
JSONObject obj = new JSONObject();
obj.put("a", "b");
obj.put("name", "your name");
输出:{" a":" b","名称":"您的姓名"}
传入javascript
var obj = '{"a": "b", "name":"your name"}',
var json = JSON.parse(obj);