将无效的json转换为json或javascript对象

将无效的json转换为json或javascript对象,javascript,Javascript,下面的字符串在键和值周围没有引号。如何将其转换为json "{1000:{FUEL LINE: NR, FUEL LEVEL: I, THROTTLE OPERATION: NR, CHOKE OPERATION: NR, AIR CLEANER: NR, CRANKCASE BREATHER: NR , SPARK PLUG: NR, VALVE CLEARANCE: I, ENGINE OIL: R, ENGINE OIL STRAINER SCREEN: C, SUSPENSION: I,

下面的字符串在键和值周围没有引号。如何将其转换为json

"{1000:{FUEL LINE: NR, FUEL LEVEL: I, THROTTLE OPERATION: NR, CHOKE OPERATION: NR, AIR CLEANER: NR, CRANKCASE BREATHER:
NR , SPARK PLUG: NR, VALVE CLEARANCE: I, ENGINE OIL: R, ENGINE OIL STRAINER SCREEN: C, SUSPENSION: I, NUTS, BOLTS FASTENERS: I, WHEEL/TYRES: I, STEERING HEAD BEARINGS: NR}
}"
我尝试了下面的代码,但没有工作。
JSON.parse(JSON.string(data))['100']


给我第100个元素不起作用,仍然将其视为字符串。

您的JSON有一些主要问题-例如:

悬架:NR,螺母,螺栓紧固件:I,车轮/轮胎:NR,转向 头部轴承:I

键/值从何处开始和结束? 我认为应该是这样的:

悬架:[编号,螺母,螺栓],紧固件:I,车轮/轮胎:[编号,转向, 头:我

逻辑修复字符串后,可以添加缺少的
,如下所示:
data.replace(/[\w\d]+/gi,“$&”)

但在你的情况下,我认为这个正则表达式会做得更好:

data.replace(/((\w\d\d\/)+[\s\w\d\/]*)+/gi,“$&”)

在当前数据字符串中,它将导致:

    "{'1000':{'FUEL LINE': 'NR', 'FUEL LEVEL': 'I', 'THROTTLE OPERATION': 'NR', 'CHOKE OPERATION': 'NR', 'AIR CLEANER': 'NR', 'CRANKCASE BREATHER':'NR ', 'SPARK PLUG': 'NR', 'VALVE CLEARANCE': 'I', 'ENGINE OIL': 'R', 'ENGINE OIL STRAINER SCREEN': 'C', 'ENGINE IDLE SPEED': 'I', 
'SECONDARYAIR SUPPLY SYSTEM': 'NR', 'SECONDARY AIR SUPPLY SYSTEM AIR CLEANER': 'NR ', 'DRIVE BELT': 'NR', 'FINAL DRIVE OIL': 'NR', 'BRAKE SHOESWEAR': 'NR', 'BRAKE SYSTEM': 'I', 'BRAKE LOCK OPERATION': 'I', 'BATTERY VOLTAGE': 'I', 'HEAD LIGHT AIM': 'NR', 'LIGHTS/HORN': 'NR', 'CLUTCHSHOES WEAR': 'NR', 'SUSPENSION': 'NR', 'NUTS', 'BOLTS FASTENERS': 'I', 'WHEEL/TYRES': 'NR', 'STEERING HEAD BEARINGS': 'I'},
'4000':{'FUEL LINE': 'I', 'FUEL LEVEL': 'I', 'THROTTLE OPERATION': 'I', 'CHOKE OPERATION': 'I', 'AIR CLEANER': 'NR', 'CRANKCASE BREATHER': 'C','SPARK PLUG': 'I', 'VALVE CLEARANCE': 'I', 'ENGINE OIL': 'R', 'ENGINE OIL STRAINER SCREEN': 'NR', 'ENGINE IDLE SPEED': 'I', 'SECONDARY AIRSUPPLY SYSTEM': 'NR', 'SECONDARY AIR SUPPLY SYSTEM AIR CLEANER': 'NR ', 'DRIVE BELT': 'NR', 'FINAL DRIVE OIL': 'NR', 'BRAKE SHOES WEAR':'I', 
'BRAKE SYSTEM': 'I', 'BRAKE LOCK OPERATION': 'I', 'BATTERY VOLTAGE': 'I', 'HEAD LIGHT AIM': 'I', 'LIGHTS/HORN': 'I', 'CLUTCH SHOES WEAR':'NR', 'SUSPENSION': 'I', 'NUTS', 'BOLTS FASTENERS': 'NR', 'WHEEL/TYRES': 'I', 'STEERING HEAD BEARINGS': 'NR'},'8000':{'FUEL LINE': 'I', 'FUEL LEVEL': 'I', 'THROTTLE OPERATION': 'I', 'CHOKE OPERATION': 'I', 'AIR CLEANER': 'NR', 'CRANKCASE BREATHER': 'C','SPARK PLUG': 'R', 'VALVE CLEARANCE': 'I', 'ENGINE OIL': 'R', 'ENGINE OIL STRAINER SCREEN': 'NR', 'ENGINE IDLE SPEED': 'I', 'SECONDARY AIRSUPPLY SYSTEM': 'NR', 'SECONDARY AIR SUPPLY SYSTEM AIR CLEANER': 'NR ', 'DRIVE BELT': 'I', 'FINAL DRIVE OIL': 'NR', 'BRAKE SHOES WEAR':'I', 'BRAKE SYSTEM': 'I', 'BRAKE LOCK OPERATION': 'I', 'BATTERY VOLTAGE': 'I', 'HEAD LIGHT AIM': 'I', 'LIGHTS/HORN': 'I', 'CLUTCH SHOES WEAR':'I', 'SUSPENSION': 'I', 'NUTS', 'BOLTS FASTENERS': 'I', 'WHEEL/TYRES': 'I', 'STEERING HEAD BEARINGS': 'NR'}}"
  • 您首先需要管理错误,即悬架:NR、螺母、螺栓紧固件:i。(您需要确定正确的格式,我刚刚将其全部删除)
  • 然后,您需要在每个字符(
    {:,
    )之前和之后加上引号,后面跟一个字母或数字
  • 最后移除新行
  • 文本现在已准备好进行解析
var text=`{1000:{燃油管路:NR,燃油油位:I,节气门操作:NR,阻风门操作:NR,空气滤清器:NR,曲轴箱呼吸器:
NR,火花塞:NR,气门间隙:I,发动机机油:R,发动机机油滤网:C,发动机怠速:I,辅助
供气系统:NR,二次供气系统空气滤清器:NR,传动带:NR,终传动油:NR,制动蹄
磨损:NR,制动系统:I,制动锁操作:I,蓄电池电压:I,头灯瞄准:NR,灯/喇叭:NR,离合器
鞋磨损:NR,悬架:NR,螺母,螺栓紧固件:I,车轮/轮胎:NR,转向头轴承:I},
4000:{燃油管路:I,燃油油位:I,节气门操作:I,节气门操作:I,空气滤清器:NR,曲轴箱呼吸器:C,
火花塞:I,气门间隙:I,发动机机油:R,发动机机油滤网:NR,发动机怠速:I,二次空气
供应系统:NR,二次空气供应系统空气滤清器:NR,传动带:NR,终传动油:NR,制动蹄磨损:
一、 制动系统:I,制动锁操作:I,蓄电池电压:I,头灯瞄准:I,灯/喇叭:I,离合器蹄磨损:
NR,悬架:I,螺母,螺栓紧固件:NR,车轮/轮胎:I,转向头轴承:NR},
8000:{燃油管路:I,燃油油位:I,节气门操作:I,节气门操作:I,空气滤清器:NR,曲轴箱呼吸器:C,
火花塞:R,气门间隙:I,发动机机油:R,发动机机油滤网:NR,发动机怠速:I,二次空气
供应系统:NR,二次空气供应系统空气滤清器:NR,传动带:I,终传动油:NR,制动蹄磨损:
一、 制动系统:I,制动锁操作:I,蓄电池电压:I,头灯瞄准:I,灯/喇叭:I,离合器蹄磨损:
一、 悬架:I,螺母,螺栓紧固件:I,车轮/轮胎:I,转向头轴承:NR}
}`.更换(/(螺母\、\s*螺栓)/g,“”)
.replace(/(\{124;\,{124;\:)\ s*(\w|\d)/g,“$1\”$2”)。replace(/(\w|\d)\s*(\}|\,|:)/g,“$1\”$2”)。replace(/\n|\r/g,”);

console.log(JSON.parse(text));
这不是一个有效的JSONY,您可能需要为此编写自己的解析器,或者做一些研究,看看是否可以找到一个可以完成这项工作的解析器(可能有一些伪JSON解析器内置了类似这样的“容错功能”)或者你向一开始就给你这个烂摊子的人抱怨…@misorude如果id regex replace怎么办?我可以用
{
替换
{
。但是我不知道这是否有效。
悬架:NR,NUTS,BOLTS紧固件:I
悬架:[“NR”,“NUTS”,“BOLTS”],“紧固件”:“I”
“悬架”:“nr”,“螺母/螺栓紧固件”:“I”
“悬架”:“nr”,“螺母/螺栓”:空,“紧固件”:“I”
或其他什么?抱歉,伙计们,这太愚蠢了。事实上,我认为键和值是由
统一分隔的。它无法转换。无论如何,如果我通过替换字符来做到这一点,它将断开,因为模式可能不同。