转换';格式错误';JavaJSON对象到javascript

转换';格式错误';JavaJSON对象到javascript,javascript,java,json,parsing,Javascript,Java,Json,Parsing,我有一个Java JSON对象,它的格式是[{a=b}],我试图将此对象作为JSON对象传递到javascript中,但它在键和值上都缺少“值”,并且使用“=”代替“:” 有没有一种简单的方法可以将这个JavaJSON对象转换为可供不同服务使用的对象 解析被证明是非常复杂的,因为实际的JSON是嵌套的,并且缺少引用和嵌套指示 “JSON”数据示例: [{wwnType=Virtual,serialNumberType=Virtual,connections=[],modified=2016-10

我有一个Java JSON对象,它的格式是[{a=b}],我试图将此对象作为JSON对象传递到javascript中,但它在键和值上都缺少“值”,并且使用“=”代替“:”

有没有一种简单的方法可以将这个JavaJSON对象转换为可供不同服务使用的对象

解析被证明是非常复杂的,因为实际的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-47a193c616c,bios={覆盖设置=[],manageBios=false},固件={firmwareBaselineUri=null,manageFirmware=false,forceInstallFirmware=false,firmwareInstallType=null},boot={manageBoot=true,order=[CD,软盘,USB,硬盘,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/db1dbcc-4237-4452-ac3-cf9dfdc75365,sanStorage={manageSanStorage=false,volumeAttachments=[]}]


谢谢,这不会很简单。不过,我认为您可以不用编写完整的解析器来完成这项工作,只要您愿意编写一个标记器或词法分析器,将输入字符串分解为标记。基本计划可能是:

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

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

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

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


    抱歉,我不认为有更简单的答案,除了你可能想研究解析器生成器(请参阅)。我实际上没有研究Java中的任何解析器生成器,所以我不知道它们的使用有多简单。请不要试图用正则表达式解决整件事。(正则表达式将有助于将字符串分解为令牌,但尝试使用正则表达式做更多的事情可能只会带来偏头痛。)

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

    例如:

    JSONObject obj = new JSONObject();
    obj.put("a", "b");
    obj.put("name", "your name");
    
    输出:{“a”:“b”,“name”:“your name”}

    传递到javascript

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

    我认为你不理解这个问题。