MengKEEE 2020-12-09 21:11 采纳率: 0%
浏览 71

微信小程序为什么云数据库里字符串数组形式的数据在js里被调用的时候自己变成了josn格式?

db.collection('users').where({id:userid}).get().then(res=>{

      var len = res.data[0].picnum;

      var picurl = [];

      for(var i=0;i<len;i++){

        var url = 'cloud://linesufe-1gzbdtjoc498b7c3.6c69-linesufe-1gzbdtjoc498b7c3-1304232581/'+userid.toString()+'_pic'+i.toString();

        picurl.push(url);

      }console.log(picurl)

      this.setData({

        pic:res.data[0].picnum,

        name:res.data[0].name,

        brief_introduction:res.data[0].BriefItroduction,

        looked:res.data[0].looked,

        looking:res.data[0].looking,

        tags:res.data[0].tags,

        photos:res.data[0].photourl,

        self_introduction:res.data[0].SelfIntroduction,

        userid:userid.toString()

      })

      //console.log(typeof(c))

    });

    console.log(this.data.pic)

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 18:29
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    问题描述中提到的字符串数组数据在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()方法遍历数组,对于每个元素,执行以下步骤:

    1. 使用JSON.parse()函数将.picurl数组转换为一个JavaScript对象。
    2. 对于每个字符串属性(如picture),使用Array.prototype.join()方法将其连接成一个完整的URL。
    3. 将查询结果转换回字符串并存储到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数组的字符串表示方式,因此这些字段也会保持原有的格式不变。

    评论

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同