mongodb: “invalid character ',' looking for beginning of value”

2023-05-16

从群里获取了一个超大的json(也就800M),需要导入mongodb,然后遇到了一个问题:

$ mongoimport --db weibo --collection data --file test.json
2018-05-09T16:10:22.357+0800    connected to: localhost
2018-05-09T16:10:22.360+0800    Failed: error processing document #2: invalid character ',' looking for beginning of value
2018-05-09T16:10:22.360+0800    imported 0 documents

first

一开始,我先去 菜鸟工具1验证了一下我的json格式不是不是正确,json格式是没有没问题的。

second

我以为是编码的问题,可能是mac下的编码有问题,因为stackoverflow2有一个谈论这个问题的。上边的回复说是有UTF8不支持的字符,但是他们遇到的问题都是\\,我还是去Windows服务器上装上了mongodb,然后还是这个问题,可见我这个可能不是字符问题。
其中JP Lew遇到了也是,的问题提到的这个做法很不错,使用-vvvv这个参数确定位置。

$ mongoimport --db weibo --collection data --file test.json -vvvvv
2018-05-09T16:30:09.538+0800    using 4 decoding workers
2018-05-09T16:30:09.539+0800    using 1 insert workers
2018-05-09T16:30:09.539+0800    will listen for SIGTERM, SIGINT, and SIGKILL
2018-05-09T16:30:09.542+0800    filesize: 823127226 bytes
2018-05-09T16:30:09.542+0800    using fields:
2018-05-09T16:30:09.552+0800    connected to: localhost
2018-05-09T16:30:09.552+0800    ns: weibo.data
2018-05-09T16:30:09.552+0800    connected to node type: standalone
2018-05-09T16:30:09.553+0800    standalone server: setting write concern w to 1
2018-05-09T16:30:09.553+0800    using write concern: w='1', j=false, fsync=false, wtimeout=0
2018-05-09T16:30:09.553+0800    standalone server: setting write concern w to 1
2018-05-09T16:30:09.553+0800    using write concern: w='1', j=false, fsync=false, wtimeout=0
2018-05-09T16:30:09.555+0800    Failed: error processing document #2: invalid character ',' looking for beginning of value
2018-05-09T16:30:09.555+0800    imported 0 documents

嗯,还是这个问题,所以我这个问题应该跟JP的那个也不一样。而且我这个应该是第一个json就出问题了!

插曲

因为文件里好多东西都没用,所以我想只把有用的那几行挑出来,但是结果感人,还是想个正经办法把。
附上 cat+grep提取个别行3

[root@localhost test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt 

linux

Redhat

[root@localhost test]# cat test.txt | grep -f test2.txt

hnlinux

ubuntu linux

Redhat

linuxmint

third

最后,在我一次又一次的实验下,终于找到了问题:

{
    ...
},
{
    ...
},
...

泥煤两个json中间多了一个逗号啊,然后写了一个脚本把这个逗号去掉吧。。。

import os
import re
import sys

args = sys.argv
if len(args) != 3 or args[1] == args[2]:
    raise Warning()
abs_path = os.path.abspath('.')
org_path = os.path.join(abs_path, args[1])
new_path = os.path.join(abs_path, args[2])
re_com = re.compile(r'^},')

try:
    fr = open(org_path, 'r')
    fw = open(new_path, 'w')
    for line in fr:
        if re_com.match(line):
            line = '}\n'
        fw.writelines(line)
except IOError as e:
    print(e)
finally:
    if fr:
        fr.close()
    if fw:
        fw.close()

这么pythonic的处理大文件的方式来自:https://www.cnblogs.com/wulaa... :

with open(filename, 'r') as file:
    for line in file:
        ....

ok,把新文件导入进去~

$ mongoimport --db weibo --collection data --file new.json
2018-05-09T15:58:36.211+0800    connected to: localhost
2018-05-09T15:58:39.194+0800    [##......................] weibo.data77.5MB/785MB (9.9%)
2018-05-09T15:58:42.195+0800    [####....................] weibo.data160MB/785MB (20.4%)
2018-05-09T15:58:45.195+0800    [#######.................] weibo.data243MB/785MB (31.0%)
2018-05-09T15:58:48.203+0800    [#########...............] weibo.data323MB/785MB (41.1%)
2018-05-09T15:58:51.197+0800    [############............] weibo.data402MB/785MB (51.2%)
2018-05-09T15:58:54.195+0800    [##############..........] weibo.data478MB/785MB (60.9%)
2018-05-09T15:58:57.196+0800    [#################.......] weibo.data560MB/785MB (71.4%)
2018-05-09T15:59:00.195+0800    [###################.....] weibo.data642MB/785MB (81.8%)
2018-05-09T15:59:03.196+0800    [######################..] weibo.data722MB/785MB (92.0%)
2018-05-09T15:59:05.521+0800    [########################] weibo.data785MB/785MB (100.0%)
2018-05-09T15:59:05.522+0800    imported 95208 documents

Bingo!


这里有两篇讨论这个问题的,我没来得及看,留给有需要的人(好吧,主要是看着太吃力了):

  • https://stackoverflow.com/que...
  • https://groups.google.com/for...

  1. https://c.runoob.com/front-en... ↩
  2. https://stackoverflow.com/que... ↩
  3. http://www.cnblogs.com/peida/... ↩
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mongodb: “invalid character ',' looking for beginning of value” 的相关文章

随机推荐

  • 七牛云存储 CDN 使用指南

    七牛cdn 使用指南 更新于2016 3 13 分为两种情况 xff1a 1 使用七牛存储 2 直接使用七牛cdn 一 使用七牛存储 xff08 七牛的存储默认使用cdn加速 xff09 静态资源存储到七牛后 xff0c 可以使用七牛提供的
  • 如何在 Debian 中安装 DHCP 服务器

    动态主机配置协议 xff08 DHCP xff09 是一种用于使主机能够从服务器自动分配 IP 地址和相关的网络配置的网络协议 DHCP 服务器分配给 DHCP 客户端的 IP 地址处于 租用 状态 xff0c 租用时间通常取决于客户端计算
  • 重磅更新:码云企业版之项目多仓库功能上线!!!

    开发四年只会写业务代码 xff0c 分布式高并发都不会还做程序员 xff1f 现在的软件开发是越来越复杂了 xff0c 以前讲系统化 模块化 xff0c 现在讲微服务化 xff0c 前后端分离 xff0c 各种编程语言混搭 xff0c 还有
  • tracking 问题解决

    1 dir 或者C 43 43 函数读文件名 xff0c 不推荐 搞乱了名字 2 matio读写矩阵 转载于 https www cnblogs com Wanggcong p 5651081 html
  • Docker系列07—Dockerfile 详解

    Docker系列07 Dockerfile 详解 1 认识Dockerfile 1 1 镜像的生成途径 基于容器制作 dockerfile xff0c docker build 基于容器制作镜像 xff0c 已经在上篇Docker系列06
  • Linux SWAP 深度解读

    概述 本文讨论的swap基于Linux4 4内核代码 Linux内存管理是一套非常复杂的系统 xff0c 而swap只是其中一个很小的处理逻辑 希望本文能让读者了解Linux对swap的使用大概是什么样子 阅读完本文 xff0c 应该可以帮
  • QT QByteArray的十进制与十六进制(字符型) 互相转换 -串口编程

    串口使用中会经常用到 目前使用到的是QByteArray number 源数据 xff0c 目标输出的进制 作下记录 xff0c 以供日后参考 转制方法有很多 xff0c 这只是其中一种 xff0c 有其他QT的进制转换方法 xff0c 欢
  • Ubuntu系统上All-in-one部署OpenStack

    虚拟机软件 xff1a VMware Workstaion12 操作系统 xff1a Ubuntu14 04 1 修改Ubuntu14 04的apt源为国内的阿里源 xff1a cp etc apt sources list etc apt
  • Debian9服务器安装

    对于使用惯windows系统的人来说 xff0c 刚开始接触使用linux系统一定是很不习惯 xff0c 因为使用环境的变化经常会出现一些错误 当然 xff0c 对于我来说 xff0c 我也是刚刚才开始接触Linux xff0c 对此 xf
  • 【AtCoder】ARC095 E - Symmetric Grid 模拟

    题目 E Symmetric Grid 题意 给定n m的小写字母矩阵 xff0c 求是否能通过若干行互换和列互换使得矩阵中心对称 n m lt 61 12 算法 模拟 题解 首先行列操作独立 xff0c 如果已确定行操作 xff0c 那么
  • docker-image container 基本操作 -常用命令

    基本概念 xff1a container 容器 可以把每个 container 看做是一个独立的主机 container 的创建通常有一个 image 作为其模板 类比成虚拟机的话可以理解为 image 就是虚拟机的镜像 xff0c 而 c
  • 为LINUX虚拟机磁盘进行扩容。

    场景1 xff1a linux6 4虚拟机 xff0c 配置1块5G磁盘 xff0c 做过LVM xff0c 现要将磁盘扩大至21G xff0c 并将扩充后的空间加入现存的LVM组 步骤 xff1a 1 在VMware上对磁盘进行扩容 xf
  • php 显示 value,[PHP] PHP7.1出现A non-numeric value encountered的解决方法

    写在开头 博主最近在升级博客插件时 xff0c 测试添加评论会出现该错误 主要表现在升级到 PHP 7 1 之后 xff0c 经常收到 A non numeric value encountered 的 warning 信息 比如下面这段代
  • 安装discuz advice_mysqli_connect

    安装discuz 报 advice mysqli conect xff0c 用yum安装php以下扩展包 即可 1 yum y install php mysql 2 yum install php tidy php devel php f
  • FreeBSD中安装源的方法

    FreeBSD中安装软件一般有两种方式 xff1a xff08 一 xff09 使用pk add r Package 来安装软件 xff0c Package安装的是已经编译好的二进制软件包 xff0c Package默认下载软件包的路径是在
  • 3.1 主流公有云介绍 3.2 阿里云ECS 3.3 登录云主机 3.4 升降级配置 3.5 安全组策略...

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 主流公有云介绍 阿里云ECS 登录云主机 升降级配置 安全组策略 主流公有云介绍 主流公有云有阿里云 TC云 JD云等等 xff0c 其中阿里云的市场占额最大且产品也有保障
  • 利用EXP每天晚上12点自动备份Oracle

    利用 EXP每天晚上12点自动备份Oracle lt xml namespace prefix 61 o ns 61 34 urn schemas microsoft com office office 34 gt 参考资料 xff1a O
  • QT-多界面切换的StackedWidget方法

    QT 多界面切换的几种方法 方法一 xff1a 用 hide 和 show 方法二 xff1a 使用StackedWidget ui设计师 刚转QT没多久 xff0c 作为一个小菜鸟 xff0c 做项目中需要进行同窗体界面切换 xff0c
  • Python 序列的切片操作与技巧

    序列 序列 consequence 是 python 中一种数据结构 xff0c 这种数据结构根据索引来获取序列中的对象 python 中含有六种内建序列类 xff1a list tuple string unicode buffer xr
  • mongodb: “invalid character ',' looking for beginning of value”

    从群里获取了一个超大的json xff08 也就800M xff09 xff0c 需要导入mongodb xff0c 然后遇到了一个问题 xff1a mongoimport db weibo collection data file tes