从JSON中读取数据追加到HTML中

本文介绍如何使用JSON数据简化视频专题页面的编程工作,并分享了具体的HTML与JS代码示例,包括数据加载、DOM操作及弹窗显示等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写内容逻辑重复性的页面时,用json数据可以显著提高编程效率,并且便于后期的数据维护。因此,在视频专题页面,需要展示多列视频数据,我选择了用json。

HTML如下(只展示重点部分,需要引用JQ)

<div class="container-fluid content ">
        <div class="container neirong">
            <div class="left fl">
                <div class="title">
                    热门视频
                </div>
                <div class="medialist">
                </div>
            </div></div>
</div>

JS如下

<script>
        $(document).ready(function(){
            
            console.log(1111)
            
                    $.getJSON('data.json',function(data){
                        
                        console.log(222)
                        
                        
                        
                    var mediahtml="";
                    
                    $.each(data,function(i,data) {
                        
                
                
                    mediahtml+='<div class="media">'+
                    '<div class="media-left">'+
                    '<a data-toggle="modal" data-target="#myModal">'+
                    '<img class="media-object" src="'+data["imgsrc"]+
                    '" alt="">'+
                        '</a>'+'</div>'+
                        '<div class="media-body">'+
                        '<div class="title">'+
                            '<span class="classify">'+
                                data["classify"]+
                            '</span>'+
                            '<span class="titlename media-heading">'+
                                data['titlename']+
                            '</span>'+
                        '</div>'+
                        '<span class="time">'+
                            '<span class="glyphicon glyphicon-time"></span> '+
                            '<span>'+data['pubdate']+'</span>'+
                        '<p>'+data["intro"]+'</p>'+
                        '<div class="guest">'+
                            '<span class="jia">嘉</span>'+
                            '<span class="name">'+data["name"]+'</span>'+
                            '<span class="position">'+data["position"]+'</span>'+
                            '<span class="glyphicon glyphicon-eye-open"></span>'+
                            '<span class="click-rite"></span>'+
                        '</div>'+
                    '</div>'+
                        
                    '<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">'+
                        '<div class="modal-dialog" role="document">'+
                            '<div class="modal-content">'+
                                '<div class="modal-header">'+
                                    '<button type="button" class="close" data-dismiss="modal" aria-label="Close">'+
                                        '<span aria-hidden="true">&times;</span>'+
                                    '</button>'+
                                '</div>'+
                                '<div class="modal-body"></div>'+
                        '</div>'+
                    '</div>'+
                    '</div>'

                        
                        
                        
//                    var url_mobi=data.url_mobi;
//                    var url_pc=data.url_pc;
//                    if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|Symbian|Windows Phone|Phone)/i))) {
//                            $('.modal-body').prepend(url_mobi);
//                            }else{
//                            $('.modal-body').prepend(url_pc);
//                            }
//                            
//                            
                            })
                    
                    $('.medialist').after(mediahtml);    
                    
                    
                })
                    
                    
                })
                


                $('#myModal').on('shown.bs.modal', function (e) {
                    // 关键代码,如没将modal设置为 block,则$modala_dialog.height() 为零  
                    $(this).css('display', 'block');
                    var modalHeight = $(window).height() / 2 - $('#myModal .modal-dialog').height() / 2;
                    $(this).find('.modal-dialog').css({
                        'margin-top': modalHeight
                    });
                });


                //点击预览图时判断
//                $('.modal').on('click', function () {
//                    if ($('#myModal').css("display") == "none") {
//                        $('.modal-body').children('iframe').attr('src', '');
//                    } else {
//                        $('.modal-body').children('iframe').attr('src',
//                            'https://v.qq.com/iframe/player.html?vid=v0508nqkm75&tiny=0&auto=0');
//                    }
//                })
        
    </script>
    

注释部分可不看,不影响内容。

首先要新建json文件,json文件需注意的问题是:json对数据格式有要求,不识别url中的各类符号,因此会提示错误,如果不修复,则会阻断JS进程,造成数据在页面不显示,这个问题我找了好久才发现,而且json问题在js中不会报错。解决办法是利用encode方法,格式化url,然后再添加进json即可,在html中应该还要用decode转回来。

第二个坑是插入html到某个标签中,有四个方法,用after就可以实现,不要用反了。

第三点是需要注意,不要在拼接字符串的时候忘掉加号,少一个就会出问题,一个小问题会找好久才发现,而且拼接错误JS不会报错,很难发现。

效果如下:
图片描述

以上就是几个小问题明天继续补充。

<think>好的,我现在需要回答用户关于如何在C#中将多条JSON数据追加到一个JSON文件中的问题。首先,我需要回顾用户之前的问题和我的回答,确保这次的回答保持一致性。用户之前问过如何将List转为JSON,现在他们想了解如何追加多条JSON数据到现有文件。 用户的问题可能是希望将多个JSON对象或数组逐步添加到一个文件中,而不是一次性全部写入。这可能涉及到读取现有文件内容,合数据,然后重新写入。或者,如果文件结构允许,直接将新数据以适当格式追加到文件中。 首先,我需要考虑常见的JSON文件结构。通常,如果存储多个对象,最自然的方式是使用JSON数组。例如,已有的文件可能有一个数组,里面包含多个对象,用户需要将新的对象添加到这个数组中。 接下来,处理步骤可能包括: 1. 检查文件是否存在。如果不存在,创建一个新的空数组。 2. 读取现有文件内容,反序列化为对象列表。 3. 将新数据添加到这个列表中。 4. 将更新后的列表序列化为JSON写回文件。 或者,如果文件较大,直接读取整个内容可能效率不高,但考虑到JSON的结构需要正确,通常必须读取整个文件进行修改。另一种情况是,如果文件是每行一个JSON对象,可以采用追加的方式,但用户的问题可能更倾向于维护一个完整的JSON数组。 需要注意的问题包括: - 文件访问的发问题:如果多个进程同时写入,可能导致数据损坏,但用户可能没有提到这方面,所以暂时可以忽略。 - 数据反序列化和序列化的正确性,特别是当文件为空或格式不正确时,如何处理异常。 - 性能问题,如果文件非常大,频繁读取和写入整个文件可能效率低下,但对于大多数情况,这种方法已经足够。 然后,我需要考虑使用哪种JSON库。之前提到过System.Text.Json和Newtonsoft.Json。用户可能对这两种方法都感兴趣,或者希望了解两者的实现方式。 对于System.Text.Json,步骤可能如下: 1. 读取文件内容,如果存在的话。 2. 反序列化为List<T>。 3. 添加新数据到列表。 4. 序列化列表写入文件。 对于Newtonsoft.Json,步骤类似,但语法稍有不同。 另外,如果文件初始为空,或者不是有效的JSON数组,需要处理这种情况。例如,如果文件不存在,则创建一个新的数组,将新数据作为第一个元素。如果文件存在但内容为空,或者格式不正确,需要异常处理或初始化一个新的列表。 可能还需要考虑格式化,例如缩进,以便生成的JSON文件易于阅读。 此外,如果用户希望追加JSON数据不是作为数组元素,而是其他结构,可能需要不同的处理方式。但根据常见情况,假设用户希望将数据追加到数组中。 现在,我需要组织这些思路,分步骤说明,提供代码示例。同时,提醒用户注意文件是否存在、反序列化可能出现的异常,以及性能方面的考虑。 可能还需要提到其他方法,比如流式处理,但这种方法可能比较复杂,适用于大型文件,但一般情况下,读取整个文件到内存更简单可靠。 最后,总结两种库的实现方法,给出建议,比如在.NET Core中使用System.Text.Json,或者在需要更多功能时使用Newtonsoft.Json。</think>在 C# 中将多条 JSON 数据追加到同一个 JSON 文件时,通常需要结合**读取现有内容**和**合数据**的操作。以下是两种主流实现方法(使用 `System.Text.Json` 或 `Newtonsoft.Json`),针对不同场景提供解决方案: --- ### **方法 1:使用 `System.Text.Json`(.NET Core 3.0+ 内置库)** #### **场景:JSON 文件存储为数组** 若 JSON 文件以数组形式存储数据(如 `[{"Name":"张三"}, {"Name":"李四"}]`),需读取数组、追加新元素后重新写入。 ```csharp using System.Text.Json; using System.Collections.Generic; using System.IO; public static void AppendToJsonFile<T>(string filePath, T newItem) { List<T> dataList; // 1. 检查文件是否存在,不存在则创建空列表 if (!File.Exists(filePath)) { dataList = new List<T>(); } else { // 2. 读取文件内容反序列化 string existingJson = File.ReadAllText(filePath); dataList = JsonSerializer.Deserialize<List<T>>(existingJson) ?? new List<T>(); } // 3. 追加数据 dataList.Add(newItem); // 4. 重新序列化写入文件 var options = new JsonSerializerOptions { WriteIndented = true }; string updatedJson = JsonSerializer.Serialize(dataList, options); File.WriteAllText(filePath, updatedJson); } ``` #### **使用示例** ```csharp var newPerson = new Person { Name = "王五", Age = 28 }; AppendToJsonFile("people.json", newPerson); ``` --- ### **方法 2:使用 `Newtonsoft.Json`(Json.NET)** #### **场景:处理复杂对象或需要更多控制** 若需动态处理 JSON 结构(如非数组格式),或需要更灵活的序列化设置: ```csharp using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.IO; public static void AppendToJsonFile(string filePath, JObject newItem) { JArray jsonArray; // 1. 读取现有内容或初始化空数组 if (File.Exists(filePath)) { string existingJson = File.ReadAllText(filePath); jsonArray = JArray.Parse(existingJson); // 假设文件存储为数组 } else { jsonArray = new JArray(); } // 2. 追加数据 jsonArray.Add(newItem); // 3. 写入文件 File.WriteAllText(filePath, jsonArray.ToString(Formatting.Indented)); } ``` #### **使用示例** ```csharp var newPerson = new JObject { ["Name"] = "王五", ["Age"] = 28 }; AppendToJsonFile("people.json", newPerson); ``` --- ### **其他场景处理** #### **场景 1:每行一个独立 JSON 对象** 若文件以**每行一个 JSON 对象**的形式存储(非数组),直接追加新行: ```csharp public static void AppendLineToJsonFile<T>(string filePath, T newItem) { string jsonLine = JsonSerializer.Serialize(newItem); File.AppendAllText(filePath, jsonLine + Environment.NewLine); } ``` #### **场景 2:合非数组结构的 JSON** 若文件内容为复杂对象(如 `{ "data": [...] }`),需定位到具体节点追加: ```csharp string json = File.ReadAllText(filePath); var root = JObject.Parse(json); var dataArray = (JArray)root["data"]; dataArray.Add(JObject.FromObject(newItem)); File.WriteAllText(filePath, root.ToString()); ``` --- ### **注意事项** 1. **发问题**:频繁读写时可能需加锁(如 `Mutex`),避免多线程/进程冲突。 2. **异常处理**:捕获 `JsonException` 处理格式错误,确保文件内容有效。 3. **性能优化**:大文件频繁读写可能影响性能,建议批量追加或使用数据库。 --- ### **代码总结** - **数组追加**:适合小型文件,直接反序列化→修改→序列化。 - **逐行追加**:适合日志类场景,无需读取全部历史数据。 - **灵活合**:通过 `JObject/JArray` 动态操作 JSON 结构。 根据实际需求选择方法,优先使用 `System.Text.Json`(性能好)或 `Newtonsoft.Json`(功能强)!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值