Angular TS中如何将JSON解析为指定类型的单个对象?
解决JSON数组转单个myobject对象的问题
嘿,这问题我熟!你遇到的核心点是JSON里的Response是一个包含两个对象的数组,直接用JSON.parse会得到数组而非单个对象,而且需要把缺失的字段设为null。下面分几种场景给你解决方案:
1. 从数组中取第一个对象转换为myobject
如果你的需求是用数组里的第一个对象来构建单个myobject,可以这么做(以JavaScript为例):
// 你的JSON字符串 const jsonStr = '{"Response": [ {"Amount": 0, "Date": "23/1/15", "Id": 12379}, {"Amount": 0, "Id": 123} ] }'; // 第一步:解析JSON const parsedData = JSON.parse(jsonStr); // 第二步:获取数组中的第一个对象(数组为空时用空对象兜底) const source = parsedData.Response[0] || {}; // 第三步:构建myobject,缺失字段设为null const myObj = { Amount: source.Amount ?? null, // 空值合并运算符,处理undefined的情况 Date: source.Date ?? null, Id: source.Id ?? null, name: null // JSON中无此字段,直接设为null };
如果是用类来实例化(比如TypeScript或者ES6类):
class myobject { Amount: number | null; Date: string | null; Id: number | null; name: string | null; constructor(amount: number | null, date: string | null, id: number | null, name: string | null) { this.Amount = amount; this.Date = date; this.Id = id; this.name = name; } } // 实例化对象 const parsedData = JSON.parse(jsonStr); const source = parsedData.Response[0] || {}; const myObjInstance = new myobject( source.Amount ?? null, source.Date ?? null, source.Id ?? null, null );
2. 合并数组中所有对象的字段(后项覆盖前项)
如果需要把数组里所有对象的字段合并到单个myobject(后面的对象字段会覆盖前面的),可以用Object.assign来合并:
const parsedData = JSON.parse(jsonStr); // 合并数组中所有对象到一个空对象 const mergedSource = Object.assign({}, ...parsedData.Response); // 构建myobject const myObj = { Amount: mergedSource.Amount ?? null, Date: mergedSource.Date ?? null, Id: mergedSource.Id ?? null, name: null };
为什么直接JSON.parse会得到两个对象?
因为你的JSON结构里Response是一个数组(用[]包裹),所以JSON.parse解析后,parsedData.Response会是一个包含两个对象的数组,而非单个对象。我们需要手动从数组中提取数据来构建你需要的单个myobject。
边界情况处理
如果Response数组为空,上面的代码会用空对象兜底,此时所有字段都会被设为null,完全符合你的需求。
内容的提问来源于stack exchange,提问作者mjht
相关产品推荐
相关产品推荐

