【问题标题】:Why does typeof JSON.parse returns string [closed]为什么 typeof JSON.parse 返回字符串 [关闭]
【发布时间】:2023-03-10 22:22:01
【问题描述】:

简要说明

我使用bottle.py作为一个简单的网络服务器,我正在渲染一个javascript,传递给它一个python字典,然后在javascript文件中我想向对象添加另一个字段并使用结果。

但是,当我在likePost() 中记录数据类型时返回字符串,所以我无法将新属性添加到对象中。

我也尝试不使用JSON.Stringify() 并返回以下错误:Unexpected token ' in JSON at position

代码

    function commentPost(post){
        var comment = prompt("Comment:", "Great post I like it")
        data = JSON.parse(JSON.stringify(post))
        console.log(typeof data)                      // RETURNS STRING
        data.comment = comment                        // THIS DOESN'T WORK
        fetch("/post", {
            method: "POST", 
            body: JSON.stringify(data)
        }).then(res => {
            likePost(data)       
        });

    }
Console.log(发布)
{'hashtag': 'landscapephotography', 'shortcode': 'B_5b0IWqrRU', 'display_url': 'https://scontent-mad1-1.cdninstagram.com/v/t51.2885-15/e35/s1080x1080/95910887_233194497953707_7239044831960646903_n.jpg?_nc_ht=scontent-mad1-1.cdninstagram.com&_nc_cat=107&_nc_ohc=i179pDQmui0AX82O3nB&oh=676ca07cba3af57944abcba4d3a27ad2&oe=5EDE8D74', 'thumbnail_src': 'https://scontent-mad1-1.cdninstagram.com/v/t51.2885-15/sh0.08/e35/s640x640/95910887_233194497953707_7239044831960646903_n.jpg?_nc_ht=scontent-mad1-1.cdninstagram.com&_nc_cat=107&_nc_ohc=i179pDQmui0AX82O3nB&oh=1ff2ac0b031bcc7cbdbb64b2a661ea1b&oe=5EDF0745', 'is_video': False, 'comments_disabled': False, 'caption': 'Photo by Jelen Girona on May 07, 2020.', 'comments_count': 0, 'timestamp': 1588877630, 'owner': '15642627659', 'likes_count': 0}
Console.log(帖子类型)

string

【问题讨论】:

  • 为什么要对 JSON 进行字符串化然后对其进行解析? post 不是有效的 JSON 吗?
  • @Ashley 否则它会给出错误 Unexpected token 正如我所说,并且 post 变量是 python 字典
  • 什么是帖子?分享有问题的数据
  • 你应该登录data看看,很可能是这个问题:stackoverflow.com/questions/42494823/…
  • 在我看来post 可能是从后端检索到的(序列化的)JSON 字符串,在这种情况下,您应该只使用JSON.parse 它,而无需再次进行字符串化。当然这只是猜测,没有看到它是什么。

标签: javascript bottle


【解决方案1】:

虽然您的typeof post 属于string,但您只需要使用JSON.parse。

失败的原因是有效的 JSON 只能有 double quotes(另请查看 here 以获取完整的 JSON 语法)。试试:

JSON.parse(post.replace(/\'/g, '"'))

对于您的情况(我刚刚看到您更新的问题),您的来源似乎返回False,首字母大写,尝试上述操作后您将收到一个新错误。

未捕获的 SyntaxError:JSON 中第 617 位的意外标记 F

如果你不能让你的 API 正确返回它,你也必须.replace 它。

const post = "{'hashtag': 'landscapephotography', 'shortcode': 'B_5b0IWqrRU', 'display_url': 'https://scontent-mad1-1.cdninstagram.com/v/t51.2885-15/e35/s1080x1080/95910887_233194497953707_7239044831960646903_n.jpg?_nc_ht=scontent-mad1-1.cdninstagram.com&_nc_cat=107&_nc_ohc=i179pDQmui0AX82O3nB&oh=676ca07cba3af57944abcba4d3a27ad2&oe=5EDE8D74', 'thumbnail_src': 'https://scontent-mad1-1.cdninstagram.com/v/t51.2885-15/sh0.08/e35/s640x640/95910887_233194497953707_7239044831960646903_n.jpg?_nc_ht=scontent-mad1-1.cdninstagram.com&_nc_cat=107&_nc_ohc=i179pDQmui0AX82O3nB&oh=1ff2ac0b031bcc7cbdbb64b2a661ea1b&oe=5EDF0745', 'is_video': False, 'comments_disabled': False, 'caption': 'Photo by Jelen Girona on May 07, 2020.', 'comments_count': 0, 'timestamp': 1588877630, 'owner': '15642627659', 'likes_count': 0}"

const postObject = JSON.parse(post.replace(/\'/g, '"').replace(/False/g, 'false'));
console.log(postObject);

我建议你也检查一下true。也许您的源/API/后端也返回它,首字母大写,并导致您的代码在以后中断。

【讨论】:

  • 是的,就是这样。似乎由于 Python 使用单引号和大写布尔值,我必须进行替换。
猜你喜欢
  • 1970-01-01
  • 2020-08-07
  • 2020-09-24
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
相关资源
最近更新 更多