Json typescript中的自定义序列化未按预期进行(数组正在转换为具有排列的对象) 1.问题
我正在用TypeScript进行自定义序列化,如下例所示 我正在将所有字符串序列化为自定义类型。使用以下方法,所有字符串都会被很好地替换,但是数组中的将作为对象返回。我们的期望是数组应该作为数组保留在返回的新对象中,对于对象和数组中都存在的字符串,它应该可以正常工作 作为额外信息,我正在序列化项目中字符串以外的自定义类型,这是我正在尝试做的一个示例 有什么意见吗 2.代码Json typescript中的自定义序列化未按预期进行(数组正在转换为具有排列的对象) 1.问题,json,typescript,serialization,Json,Typescript,Serialization,我正在用TypeScript进行自定义序列化,如下例所示 我正在将所有字符串序列化为自定义类型。使用以下方法,所有字符串都会被很好地替换,但是数组中的将作为对象返回。我们的期望是数组应该作为数组保留在返回的新对象中,对于对象和数组中都存在的字符串,它应该可以正常工作 作为额外信息,我正在序列化项目中字符串以外的自定义类型,这是我正在尝试做的一个示例 有什么意见吗 2.代码 第一个json显示传入的对象 第二个json显示返回的对象:我们可以看到z正在转换为一个对象 预期产出 { "x
- 第一个
显示传入的对象json
- 第二个
显示返回的对象:我们可以看到json
正在转换为一个对象z
{
"x": 1,
"y": "hello",
"z": [{"a": 10, "b": ["hello", "hi"]}]
}
{
"x": 1,
"y": {"_type": "test", "_value": "hello"},
"z": [{"a": 10, "b": [{"_type": "test", "_value": "hello"}, {"_type": "test", "_value": "hi"}]}]
}
对您的任务的直接回答如下:
const sample: Record<string, any> = {
x: 1,
y: 'hello',
z: [{ a: 10, b: ['hello', 'hi'] }]
};
function replacer(key, value) {
if (['_type', '_value'].includes(key)) {
return value;
}
if (typeof value === 'string') {
return {
_type: 'test',
_value: value,
};
}
return value;
}
console.log(JSON.stringify(sample, replacer, 2));
但我的直觉告诉我,你正在试图发明轮子,所以我建议你去看看它能帮你操纵普通对象到类和回类
注意:如果您使用的是typescript,请尽量不要使用
any
我看不出您在哪里使用IsArray。我想添加一些功能来区分对象和数组,但不确定如何使用。对此很抱歉,现在它什么也没做。那么就从帖子的代码中去掉它吧,这样对于那些想要帮助的人来说就更容易阅读了。任何不必要的事情都会损害你获得帮助的能力。当然,你得把它拿出来。感谢问题是这个对象。条目(['a',b'])将返回[[“0”,“a”],[“1”,“b”]],这就是为什么在您进行操作后,您得到的是该对象而不是ArrayTanks@D.Dimitrioglo,它解决了问题。我将努力学习班上的特朗斯弗默。谢谢
{
"x": 1,
"y": "hello",
"z": [{"a": 10, "b": ["hello", "hi"]}]
}
{
"x": 1,
"y": {"_type": "test", "_value": "hello"},
"z": [{"a": 10, "b": [{"_type": "test", "_value": "hello"}, {"_type": "test", "_value": "hi"}]}]
}
const sample: Record<string, any> = {
x: 1,
y: 'hello',
z: [{ a: 10, b: ['hello', 'hi'] }]
};
function replacer(key, value) {
if (['_type', '_value'].includes(key)) {
return value;
}
if (typeof value === 'string') {
return {
_type: 'test',
_value: value,
};
}
return value;
}
console.log(JSON.stringify(sample, replacer, 2));
{
"x": 1,
"y": {
"_type": "test",
"_value": "hello"
},
"z": [
{
"a": 10,
"b": [
{
"_type": "test",
"_value": "hello"
},
{
"_type": "test",
"_value": "hi"
}
]
}
]
}