精华内容
下载资源
问答
  • 不过对于一些少量数据的,这是一件非常简单的事情,但是当遇到大量数据的时候,这个就明显GG,今天我就遇到了一个,如果按照前端既定的结构生成json文件,文件是4.2M,当时的我简直满脸黑线,后面找到了方法,将数据...

    在前端与后端做交互的时候,有的时候为了减少网络请求,很多时候都会将修改频次极低生成本地化文件进行直接操作,例如地址选择的数据,现在很多平台都是采用将这样的操作。不过对于一些少量数据的,这是一件非常简单的事情,但是当遇到大量数据的时候,这个就明显GG,今天我就遇到了一个,如果按照前端既定的结构生成json文件,文件是4.2M,当时的我简直满脸黑线,后面找到了方法,将数据降低到0.7M,这大概是我现在的极限了,要是还想小,就只能改结构或者跟前端玩命去了。

    下面讲一下“压缩的具体方式”,php为例

    一.优化数据的结构

    想要文件体积减小,优先考虑的应该是如何将文件所需要存储的数据量降低。需要做的是讨论最小可行的一个结构,将不需要的字段去除,将其中单词,代码进行缩减。

    二.不要让json中文转码

    在调用PHP的json_encode()函数的时候,会将中文进行编码Unicode,在正常情况下来看,这个可能是除了使生成的json串可读性降低了而已,不过在这种特殊情况下,也不能忽略由于编码,而造成的额外大量的体积开销。不进行编码的话,会让文件缩小很多。

    我之前写过一篇使json_encode不转码的文章,不过那个函数相对复杂,兼容了键也是汉字的情况,有兴趣的话可以看看那篇博文,本次讲解,用以下函数就够。

    function jsonEncode($da)

    {

    return urldecode(json_encode(arrUrlencode($da)));

    }

    function arrUrlencode($da)

    {

    if(is_array($da)){

    foreach($da as $k => $v) {

    if(is_array($v)){

    $da[$k] = arrUrlencode($v);

    }elseif(is_string($v) && !is_numeric($v)) {

    $da[$k] = urlencode($v);

    }

    }

    }

    return $da;

    }

    三.采用压缩的算法

    现在常见的json压缩算法有CJSON与HPack,其原理都是将key和value进行抽离,节省掉部分的重复的key值造成的空间消耗。此次中我用到的是CJSON算法。

    HPack的基本是将key值抽离出来,被提取前和提取后的数据示例如下,看起来更像是表格化了,是不是很简单:

    # 提取前

    [

    {name: "Lam", age: 18, gender: "男", hobit: "看书"},

    {name: "Lee" , age: 20, gender: "女", hobit: "跳舞"},

    ]

    # 压缩后

    [

    ["name", "age", "gender", "hobit"],

    ["Lam", 18, "男", "看书"],

    ["Lee", 20, "女", "跳舞"],

    ]

    具体实现算法的加密解密现阶段已经有了,犯懒直接粘贴链接https://github.com/WebReflection/JSONH 「注意,可讲类中的json_encode 替换为 第二节提到的 jsonEncode 会使数据进一步缩小」

    展开全文
  • 我使用以下算法gzipped json文件(来自:java gzip can’t keep original file’s extension name)private static boolean compress(String inputFileName, String targetFileName){boolean compressResult=true;...

    我使用以下算法gzipped json文件(来自:

    java gzip can’t keep original file’s extension name)

    private static boolean compress(String inputFileName, String targetFileName){

    boolean compressResult=true;

    int BUFFER = 1024*4;

    byte[] B_ARRAY = new byte[BUFFER];

    FileInputStream fins=null;

    FileOutputStream fout=null;

    GZIPOutputStream zout=null;

    try{

    File srcFile=new File(inputFileName);

    fins=new FileInputStream (srcFile);

    File tatgetFile=new File(targetFileName);

    fout = new FileOutputStream(tatgetFile);

    zout = new GZIPOutputStream(fout);

    int number = 0;

    while((number = fins.read(B_ARRAY, 0, BUFFER)) != -1){

    zout.write(B_ARRAY, 0, number);

    }

    }catch(Exception e){

    e.printStackTrace();

    compressResult=false;

    }finally{

    try {

    zout.close();

    fout.close();

    fins.close();

    } catch (IOException e) {

    e.printStackTrace();

    compressResult=false;

    }

    }

    return compressResult;

    }

    我正在返回JSON

    response.setHeader("Content-Type", "application/json");

    response.setHeader("Content-Encoding", "gzip");

    response.setHeader("Vary", "Accept-Encoding");

    response.setContentType("application/json");

    response.setHeader("Content-Disposition","gzip");

    response.sendRedirect(filePathurl);

    要么

    request.getRequestDispatcher(filePathurl).forward(request, response);

    尝试使用AJAX代码访问JSON对象,如下所示:

    $.ajax({

    type : 'GET',

    url : url,

    headers : {'Accept-Encoding' : 'gzip'},

    dataType : 'text',

    我看到的输出是二进制数据,而不是解压缩的JSON字符串.关于如何使这项工作的任何建议?

    请注意,我正在使用的浏览器(IE,Chrome,FF)支持gzip,因为我的所有静态内容都被Apache正确呈现.

    展开全文
  • java/SpringBoot项目将json文件内容写入数据库大致步骤:添加依赖Jackson->利用ObjectMapper的readValue读取json文件,转为Map对象->读取过后对处理map,分别按需求进行取值,添加进数据库即可那么开始操作!1...

    java/SpringBoot项目将json文件内容写入数据库

    大致步骤:

    添加依赖Jackson

    ->利用ObjectMapper的readValue读取json文件,转为Map对象

    ->读取过后对处理map,分别按需求进行取值,添加进数据库即可

    那么开始操作!

    1.添加依赖包

    com.fasterxml.jackson.core

    jackson-core

    2.9.8

    2.实体,构造和get/set方法自然不用多说,按需设置

    3.写好数据库具体基础添加方法

    service接口->impl实现类->调用的mapper数据库方法->mybatis的核心sql语句*mapper.xml文件!

    4.操作json文件也是这里的核心代码(sss()是测试方法)

    emmmm…具体步骤看注释!

    public boolean sss(){

    ObjectMapper mapper = new ObjectMapper();//实例一个ObjectMapper

    try {

    Map map = mapper.readValue(

    new File("E:\\WorkSpace\\msg\\src\\main\\resources\\json\\hotelList\\hotellist_cityId1.json"),//使用mapper.readValue,读取json文件

    new TypeReference>(){});

    // public T readValue(File src, TypeReference valueTypeRef)调用这个,暂时猜测是,前者是具体文件,后者是需要加工成的参考类型,这里是通过jsonFactory处理为map文件

    //取得需要的hotels,(这里hotelList就是整个json文件最外成的key,value就是hotels但也是map,强转为list就可进行遍历。)

    List hotels = (List) map.get("HotelList");

    Hotel hotel = new Hotel();//实例化实体对象

    int inser=0;//计算添加了多少条

    for (int i=0;i

    Map h = (Map) hotels.get(i);

    //封装实体

    hotel.setCityID(h.get("CityID")==null?null:(Integer) h.get("CityID"));//添加三元运算,主要是判断是否为空,为空就写null,不为空就转为需要的类型

    hotel.setNameChn(h.get("NameChn")==null?null:h.get("NameChn").toString());

    hotel.setNameEng(h.get("NameEng")==null?null:h.get("NameEng").toString());

    hotel.setAddress(h.get("Address")==null?null:h.get("Address").toString());

    hotel.setAddressEng(h.get("AddressEng")==null?null:h.get("AddressEng").toString());

    hotel.setStar(h.get("star")==null?null:(Integer) h.get("star"));

    hotel.setIntroduction(h.get("Introduction")==null?null:h.get("Introduction").toString());

    hotel.setLatitude(h.get("Latitude")==null?null:h.get("Latitude").toString());

    hotel.setLongitude(h.get("Latitude")==null?null:h.get("Latitude").toString());

    hotel.setCommentScore(h.get("CommentScore")==null?null:Double.parseDouble( h.get("CommentScore").toString()));//intger装doouble 要先转为string

    hotel.setRemarks(h.get("Remarks")==null?null:h.get("Remarks").toString());

    insert(hotel);//添加进数据库

    inser ++;

    }

    System.out.println("添加条数:"+inser);

    } catch (IOException e) {

    e.printStackTrace();

    }

    return false;

    }

    5.测试,调用即可

    @Test

    public void contextLoads() {

    hotelService.sss();

    }

    注意:

    在写测试的时候犯了一个错,导致空指针异常。

    错误: 之前是通过HotelServiceImpl hotelService1=new HotelServiceImpl();然后直接调hotelService1.sss()方法,就导致了关于映射mybatis数据库方法,的mapper/DAO接口的 对象一直报空指针!

    解决: 在service中多写一个方法,impl中sss()作实现,测试实例就是用:

    @Resource

    private HotelService hotelService;

    测试:

    hotelService.sss();

    ok!终于解决一个空指针异常!

    6.其实还有起他的方法,这里就不多说了。。。

    这里是同事用的另一种:

    展开全文
  • json 文件遍历压缩

    2016-12-03 17:32:05
    /* *time:2016年12月3日16:42:46 ...*功能:json文件遍历压缩 * */ header('content-type:text/html;charset=utf8'); fRename('../json'); //使用该方法参数为文件夹目录 function fRename($dirname) { if (!
    <?php
    /*
    *time:2016年12月3日16:42:46
    *author:zhangchennyang
    *功能:json文件遍历压缩
    *
    */
    
    header('content-type:text/html;charset=utf8');
    fRename('../json');  //使用该方法参数为文件夹目录
    function fRename($dirname)
    {
        if (!is_dir($dirname)) {
            echo "{$dirname}不是一个有效的目录!";
            exit();
        }
        $handle = opendir($dirname);
         while (($fn = readdir($handle)) !== false) {
            if ($fn != '.' && $fn != '..') {
    
              //  echo "fn = " . $fn . "\n\r";
                $curDir = $dirname . '/' . $fn;
    
               // echo "curDir = " . $curDir . "\r\n";
                if (is_dir($curDir)) {
                    fRename($curDir);
                } else {
    
                    $path = pathinfo($curDir);
    				//var_dump($curDir);
    				$file_type=$path['extension'];
    				if($file_type=='json'){
    					$str=file_get_contents($curDir); //根据文件夹读取文本获得字符串
    					$arr=json_decode($str,true);     //转为数组
    					 
    			     
    					$k_str=json_encode($arr);//数组转换为字符串
                        $statu=file_put_contents($curDir,$k_str);
    					
    					if($statu){ //格式化成功
    					  $time=date('y-m-d h:i:s');   //执行时间
    					  $wenjian=$curDir;
    					   $ok_= 'file' . $wenjian . '---time:' . $time.'-'.PHP_EOL;
                                file_put_contents('ok.txt',$ok_, FILE_APPEND);
    						
    					}else{
    					    $time=date('y-m-d h:i:s');  //执行时间
    						$wenjian=$curDir;
    						$error_info= 'file' . $wenjian . '---time:' . $time.'-'.PHP_EOL; 
                            file_put_contents('error.txt',$error_info, FILE_APPEND);
    					}
    					
    				}  
                }
    
            }
    
        }
    }
    
    
    
    //去掉空格等等字符串
    /*function trimall($str){
        $qian=array(" "," ","\t","\n","\r");
        $hou=array("","","","","");
        return str_replace($qian,$hou,$str); 
      
    }*/
    
    
    

    展开全文
  • 一般的json文件拥有很多的空格和注释,虽然读起来比较方便,但是在运行的时候是要占一些内存的。于是json压缩工具就应运而生了,这个工具是用java做的,原理是:1:在Eclipse中导出一个可运行的jar文件2:用python...
  • json2txt “解压缩”的文件json 伴奏自动配置automake --add-missing 。/配置使进行安装 您可以“制作”新的安装程序。
  • nginx 压缩json

    2021-03-19 11:20:54
    Nginx配置文件配置 在server节点下新增如下内容,开启gzip压缩。注意后端需要保证返回的 Content-Type: application/json;charset=UTF-8 gzip on; gzip_min_length 1k; gzip_comp_level 6; gzip_proxied expired ...
  • 本篇博客不是技术类而是是工具类的博客,介绍如何将压缩好的HTML,CSS,JavaScript,Json文件复原。 将压缩的HTML文件复原 将压缩的CSS文件复原 将JavaScript文件复原 将Jason文件复原 为什么要压缩? 好好的文件...
  • Java生成Json文件添加到ZIP压缩并导出前言代码说明小结 前言      需要根据在前端选择的文件列表生产Json文件并导出Zip文件 代码说明      前端部分的方法: //...
  • 您的数据有一些字符(位置58765-58767)无法用您的字符集表示...这是一个例子:我有档案:# coding=utf-8print(u"русский текст") # This is russian text (cyrilic chars)文件是UTF8本身,因此Python知道...
  • 如果服务器使用RethinkDB分布式数据库保存JSON数据,在...经过对比测试,JSON文本内容保存成txt文档之后,再压缩成zip文件占用空间非常小,可以作为优化方案来实施。比如以JSON格式化方式保存成txt文档,文件大小...
  • 经过测试,目前压缩率为5%–30%不等,且JSON文件压缩后,转换成的ifcxml文档可以被Revit Naviswork等BIM系列软件可以正常读取。 目前学术论文尚未有研究针对BIM模型的前端json文件做轻量化。有两个顶级985...
  • json文件示例 本系列文章于2017年中用... 当然,我们不能保存Blob数据(例如,视频,音频或压缩数据),因为JSON文件基本上是一个文本文件,我们可以使用任何文本编辑器进行编辑。 让我们快速看一下以下示例: ...
  • 要求 :我有一个.gz格式的Json文件。因此,压缩后的大小约为500 MB。当我提取它时,json文件几乎变成了大约10GB。提取的JSON文件逐行包含单个JSON对象。我想要的是ps使用任何bash脚本或python程序基于字段对文件进行...
  • 项目背景:assets包下有个json压缩文件,要求对该文件进行解压,再对解压后的json文件进行解析,并最终将数据存入数据库中。 解压工具类: public class ZipUtils { public static final String TAG = ZipUtils...
  • 将实例分割结果MASK以RLE格式以json形式输出方便其他工具使用 使用环境 从github上自行下载源码,按其说明配置,链接 代码 from mmdet.apis import init_detector, inference_detector, show_result_pyplot, show_...
  • 写在前面 CSDN没有保存 这是第二次写了。。某些内容已缺失 ...像这种有集合有数组的json文件 压缩后扔给后台 使用 DealFileVO类 private ConfsetVO confSet; private RecordSetUploadVO rec...
  • 接到项目求助,需要对上千个文件夹中的文件进行压缩处理,并要删除源文件,只保留压缩后的压缩文件,数据量大,手动完成耗时耗力,用Python处理再合适不过了。二、项目目标批量对文件夹的内容进行压缩处理,满足客户...
  • 一般的json文件拥有很多的空格和注释,虽然读起来比较方便,但是在运行的时候是要占一些内存的。于是json压缩工具就应运而生了,这个工具是用java做的,原理是:1:在Eclipse中导出一个可运行的jar文件2:用python...
  • <p>I am writing a trie DS, json gzipped into a file <code>trieSample.json.gz, and reading it back into the struct. Strangely, the unmarshal succeeds but the struct is not populated. <p>I have tried ...
  • android Zip压缩 删除文件 Gson解析Json
  • 一、原由策划用xlsx导出多个json数据之后,需要打包成一个大的json文件,然后这个客户端程序需要用这个文件。那么问题来了,策划不想要每次都需要手动做操作,希望程序写个脚本,每次只要执行脚本,就可以完成一整套...
  • 在asp.net core中则可以使用BuildBundlerMinifier来进行css,js的压缩合并 ... Minifier,手动压缩文件) 2、新建:bundleconfig.json 绑定和缩减 [ { // 要输出的捆绑文件名称。 可以包...
  • JSONC, JSON压缩器和解压缩JSONC 版本更新到版本 变更日志文件背景使用Javascript开发富internet应用程序( RIA )的一个问题是传输到服务器和从服务器传输的数据量。 当数据来自服务器时,这个数据可能被压缩,...
  • python 读写 json文件

    2018-03-15 21:56:00
    json的优势: 1. 数据体积方面。...数据格式比较简单, 易于读写, 格式都是压缩的。 4. 与python的交互使用方便 json 是 k-v结构的形式, 简单来说, 如果是一个key,对应一个value.中间用 : 分隔,最外面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,507
精华内容 602
关键字:

压缩json文件