Javascript 如何从对象响应中删除特定键值的引号并返回相同的结构
我的回答如下Javascript 如何从对象响应中删除特定键值的引号并返回相同的结构,javascript,arrays,object,Javascript,Arrays,Object,我的回答如下 { "last UpdatedTime":"18:00:01 AM", "has PErmission":false, "block UsersSubFeatures":true, "block CurrentUserTill":"NA", "unlock UserOnlyForVisibility":&
{
"last UpdatedTime":"18:00:01 AM",
"has PErmission":false,
"block UsersSubFeatures":true,
"block CurrentUserTill":"NA",
"unlock UserOnlyForVisibility":"['departmentXYZ']"
}
注意:“unlockUserOnlyForVisibility”:“['departmentXYZ']”//数组以字符串形式存在。但是你想像我一样改变信仰吗
{
"last UpdatedTime":"18:00:01 AM",
"has PErmission":false,
"block UsersSubFeatures":true,
"block CurrentUserTill":"NA",
"unlock UserOnlyForVisibility":['departmentXYZ']
}
所以我尝试了JSON.parse(),它在位置1处为我提供了意外的syntaxError:JSON中的意外标记
[对象对象]
所以尝试了下面这样的正则表达式,它成功地删除了引号。但不确定这是否是正确的处理方法
感谢您的帮助正确的修复方法是修复您的后端,以及您如何生成和管理价值。如果您确实想使用前端修复它,则需要两个步骤:
- 将单引号转换为双引号
- 使用JSON.parse将给定字符串转换为对象
JSON.parse(“['departmentXYZ']”。替换(/'/g'”);//['departmentXYZ']
正确的修复方法是修复后端,以及如何生成和管理值。如果确实要使用前端修复,则需要两个步骤:
- 将单引号转换为双引号
- 使用JSON.parse将给定字符串转换为对象
JSON.parse(“['departmentXYZ']”)。replace(/“/g'”);//[“部门XYZ”]
正如Olyno所提到的,显然这是需要修复的
也就是说,您需要将“[
替换为[
”,将替换为]
,然后分别处理元素的单引号
const响应=`{
“上次更新时间”:“18:00:01 AM”,
“有许可”:假,
“块用户SSUBfeatures”:true,
“block CurrentUserTill”:“NA”,
解锁UserOnlyForVisibility:“['hello world','test2']”
}`
函数cleanBrokenJSONObject(数据){
返回数据
.replace(/“\[([^\]]*)\]”/g,函数(\,singleQuoteElements){
常量元素=singleQuoteElements.replace(/“/g,”);
返回“[${elements}]`
})
}
const res=cleanBrokenJSONObject(响应);
console.log(JSON.parse(res));
正如Olyno提到的,显然这是需要在后端解决的问题
也就是说,您需要将“[
替换为[
”,将替换为]
,然后分别处理元素的单引号
const响应=`{
“上次更新时间”:“18:00:01 AM”,
“有许可”:假,
“块用户SSUBfeatures”:true,
“block CurrentUserTill”:“NA”,
解锁UserOnlyForVisibility:“['hello world','test2']”
}`
函数cleanBrokenJSONObject(数据){
返回数据
.replace(/“\[([^\]]*)\]”/g,函数(\,singleQuoteElements){
常量元素=singleQuoteElements.replace(/“/g,”);
返回“[${elements}]`
})
}
const res=cleanBrokenJSONObject(响应);
log(JSON.parse(res))代码>这样做的正确方法是修复生成基本上已损坏的解锁useronlyforvisibility
value@CertainPerformance我知道这应该在后端修复。但没有人对此进行调查。因此,我正在寻找前端解决方案:(不幸的是,我想再次建议JSON.parse,但引号是一个单引号。这是源代码语法,而不是JSON语法。所以一些字符串化的源代码以某种方式进入了您的JSON。这太疯狂了。如果没有其他问题,只需删除字符串的前2个和最后2个字符。由于语法不是JSON,您必须定义是的。这真的取决于你想要允许的语法的灵活性。@Wyck如果你是指像JSON.parse(JSON.parse(data)),它会给我错误。如果不是,我很抱歉错误地理解了你的想法。请告诉我example@worstCoder,没错。显然,这不起作用,因为里面不是JSON。JSON.parse(数据).unlockUserOnlyForVisibility.slice(2,-2)的
将在这种特定情况下起作用。正确的方法是修复产生基本损坏的unlockUserOnlyForVisibility
value@CertainPerformance我知道这应该是后端修复。但没有人对此进行研究。所以我正在前端寻找解决方案:(不幸的是,我想再次建议JSON.parse,但引号是一个单引号。这是源代码语法,而不是JSON语法。所以一些字符串化的源代码以某种方式进入了您的JSON。这太疯狂了。如果没有其他问题,只需删除字符串的前2个和最后2个字符。由于语法不是JSON,您必须定义是的。这真的取决于你想要允许的语法的灵活性。@Wyck如果你是指像JSON.parse(JSON.parse(data)),它会给我错误。如果不是,我很抱歉错误地理解了你的想法。请告诉我example@worstCoder,没错。显然,这不起作用,因为里面不是JSON。JSON.parse(数据).unlockUserOnlyForVisibility.slice(2,-2)
将在一种特定情况下工作。如何像这种const response=
{associates:{“last UpdateTime”:“18:00:01 AM”,“has PErmission”:false,“block UsersSubFeatures”:true,“block CurrentUserTill”:“NA”,“unlock UserOnlyForVisibility:“['hello world','test2']”仍然是深度为1的数组。对象的深度为2,但这不会影响我编写的脚本。如果数组的深度大于1,则此操作无效,例如:“['hello world',['depth','2']]“
我把它传达错了。我完全同意你当前的解决方案,这就是我接受它的原因:)。但请指导我如何修改正则表达式,使其成为这样的“仅解锁用户以获得可见性”:“你好,世界”
。这是@worstCoder,你忘记了sub周围的”
(即:“sub”:
)抱歉输入了bro。但是它给了我!未捕获的TypeError:data.replace不是