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不是