以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
问题描述中提到的字符串数组数据在wx小程序
中的情况涉及到JavaScript对象和JSON(JavaScript Object Notation)这两种数据类型。当我们通过.get()
方法获取存储在数据库中的users
集合时,会根据id参数对数据库查询结果进行索引和处理,最终返回一个包含用户信息的对象。如果用户的id为某个特定值(如userid
),则获取该用户的具体信息并将其保存到本地JSON数组中。
当将用户id转化为字符串并存储到picurl
数组中时,出现与JSON结构不一致的情况,是因为picurl
对象不是JavaScript对象而是json字符串。在实际操作中,picurl
是一个表示数组或对象的字符串,并且具有相同的语法结构,即数组键必须由.
分隔,并用数字进行索引。
要解决此问题,我们可以使用JSON.parse()函数将JSON字符串转换为JavaScript对象,然后利用Array.prototype.map()
方法遍历数组,对于每个元素,执行以下步骤:
- 使用JSON.parse()函数将
.picurl
数组转换为一个JavaScript对象。 - 对于每个字符串属性(如
picture
),使用Array.prototype.join()
方法将其连接成一个完整的URL。 - 将查询结果转换回字符串并存储到
picurl
数组中。
以下是修改后的JavaScript代码示例:
// 假设data对象已经存储了数据库查询结果
let data = {
picNum: '0',
name: 'test user',
BriefIntroduction: 'short introduction',
looked: 'looked',
looking: 'looking',
tags: 'tags',
photourl: 'https://example.com/pic1.jpg',
SelfIntroduction: 'self-introduction',
userId: 'userId',
};
// 将查询结果转换为JSON对象
let jsonResult = JSON.stringify(data);
// 检查jsonResult是否与原picurl数组相同
if (jsonResult === JSON.parse(jsonResult).picurl) {
// 微信小程序内部有特殊的逻辑处理图片路径
// 如果插件未实现API处理,则原jsonurl数组中的`picurl`字段值不会自动转化成正确的JS对象类型
// 在这里,我们假设原始JSON字符串格式并未发生变化
let picUrl = jsonResult.split(', ')[0];
data.pic = picUrl;
// 更新数据对象,并将原picurl数组中的`pic`字段直接设置为JSON对象类型的JSON字符串
data Pic = JSON.parse(jsonResult);
data.pic = Pic.pic;
} else {
// 替换picurl数组中的非JSON对象的值
data.pic = '[]';
}
this.setData({
pic: JSON.stringify(data),
name: JSON.stringify(data.name),
BriefIntroduction: JSON.stringify(data.BriefIntroduction),
looked: JSON.stringify(data.looked),
looking: JSON.stringify(dataLooking),
tags: JSON.stringify(data.tags),
photos: JSON.stringify(data.photos),
self_introduction: JSON.stringify(data.selfIntroductory),
userId: JSON.stringify(data.userId)
});
这样,当您运行上述代码时,picurl
数组将被成功地转换为JavaScript对象,满足jsonurl
应具备的key-value对关系,并且可以方便地在JavaScript环境中使用。同时,由于只有 userId
字段符合JSON字符串的基本格式要求,而其他字段遵循picurl
数组的字符串表示方式,因此这些字段也会保持原有的格式不变。