创建用于 XML 导出的多维对象

2024-03-11

我正在导入一个包含大量发票数据的 csv 文件。该数据需要根据供应商 ID 分组在一起,以显示每个供应商的标题以及该供应商 ID 的所有发票的总和;然后在其下方显示每张单独的发票。该项目的目标是导入 CSV、向用户显示数据、允许通过选择框更改某些值,然后单击按钮导出到 XML。 XML 的结构与 HTML 类似,每组发票首先显示某些通用数据,然后是汇款数据。为了实现这一点,我尝试以某种方式构建对象,以帮助我使用此方法将其正确转换为 XMLhttp://goessner.net/download/prj/jsonxml/ http://goessner.net/download/prj/jsonxml/ .

问题:后两笔付款需要分组在一起,我希望为每行详细数据创建一个数组,然后将其添加到主对象的 PmtDetail 属性中。目前,此代码仅广告第一行并忽略其余行。

CSV 片段(我不包括此处代码中使用的所有行)

 ID         CardCode   payment_sum    amount     
 1610165    BENV5271    100            100 
 1609026    BENV5635    509.85         287.33
 1609025    BENV5635    509.85         222.52 

JSON

 [{"DocNum":"1610165","CardCode":"BENV5271","InvPayAmnt":"100.00","PmntDate":"2012-03-29","payment_sum":"100.00"},
 {"DocNum":"1609026","CardCode":"BENV5635","InvPayAmnt":"287.33","PmntDate":"2012-03-29","payment_sum":"509.85"},  
 {"DocNum":"1609025","CardCode":"BENV5635","InvPayAmnt":"222.52","PmntDate":"2012-03-29","payment_sum":"509.85"}]

Jquery

 $(document).ready(function() {
    $.getJSON('CSV.php', function(data) {

    var prevCardCode = '';
    var newDiv; var NewDiv2;
var PaymentFormat;

    $.each(data, function(index, element) { //looping once to display header info such as sum
        XMLObject = []; // Creating a new object for each row     

        if (element['CardCode'] != prevCardCode) {

            XMLObject.Vendor_Sum = element['payment_sum'];
            XMLObject.Name1 = element['CardName'];
            XMLObject.Addr1 = element['Address'];

            console.log(XMLObject);

            newDiv = $('<div/>').addClass('row').appendTo('#showdata');
            $('<div class="sum_field">' + 'Total: ' + element['payment_sum'] + '</div>').appendTo(newDiv);

                $('<div class="options">Payment Format: <select name="Payment_Format" id="Payment_Format"><option value="CTX" selected="selected">Company to Company</option><option value="PPD">Company to Person</option></select> </div><div id="Selected_Format"></div>').appendTo(newDiv);

                XMLObject.paymentFormat = $('select#Payment_Format').val();;

                $('select#Payment_Format').change(function(){
                    PaymentFormat = $(this).val();
                    XMLObject.paymentFormat = PaymentFormat;
                });

        }

        newDiv2 = $('<div/>').addClass('sub_row').appendTo(newDiv);

        prevCardCode = element['CardCode'];

        $.each(element, function(key, value) { looping 2nd time to display the detail info
            XMLObjectDetail = {};   // Creating an array for each row of detail info

            XMLObjectDetail['TotalCurAmount'] = element['InvPayAmnt']; 
            XMLObjectDetail['NetCurAmount'] = element['InvPayAmnt'];

                   $('<div class="field">' + value + '</div>').appendTo(newDiv2);
                   XMLObject.PmtDetail =  XMLObjectDetail;
             });      
         });
     });
  });

PHP

 <?php 
  if (($handle = fopen('upload/BEN-new.csv', "r")) === FALSE) {
    die('Error opening file'); 
 }

 $headers = fgetcsv($handle, 1024, ',');
 $complete = array();

while ($row = fgetcsv($handle, 1024, ",")) {
       $complete[] = array_combine($headers, $row);
}
    fclose($handle);

    echo json_encode($complete);

?>


一些想法:

  • $.each(data, ... //looping once to display header info such as sum你没有在任何地方创建一个总和。此外,这是唯一一个迭代所有的循环data rows.
  • XMLObject = []; // Creating a new object for each row- 不,你正在创建一个数组。你真的应该创建一个对象({}),因为你将它用作对象。
  • XMLObject =...。你缺少一个var关键字在这里。每次迭代都会创建一个新对象,但将每个对象分配给同一个全局变量。这就是原因#Payment_Format更改处理程序只会更改最后创建的对象的格式 - 当前由“引用的对象”XMLObject".
  • $('...<select name="Payment_Format" id="Payment_Format">...')您正在创建一个选择id每次迭代。你认为 id 如何是唯一的?这也是为什么('select#Payment_Format')将不选择当前迭代中创建的元素。
  • $.each(element... looping 2nd time to display the detail info不。这不是第二个循环,而是一个将迭代当前属性的循环element- 循环将应用于每个迭代data-rows.
  • XMLObjectDetail = {}; // Creating an array for each row of detail info- 不,你正在创建一个对象。再说一次,你错过了var关键词。
  • (edit) XMLObject.PmtDetail = XMLObjectDetail;- 您在此处的元素的每次迭代中都会覆盖“PmtDetail”属性。那不应该是您附加到的数组吗?
  • 在循环代码的末尾你有一个XMLObject,包含有关当前行的数据。您不想用它做一些事情,例如将其推送到行对象数组上吗?

好吧,我想现在我已经得到了你想要达到的目标。合适的结构可能是:

[ {
    "CardCode":"BENV5271"
    "details": [ {
        "DocNum": "1610165",
        "InvPayAmnt": "100.00",
        "PmntDate": "2012-03-29"
      } ],
     "payment_sum": "100.00"
   }, {
     "CardCode": "BENV5635",
     "details": [ {
         "DocNum": "1609026"  
         "InvPayAmnt": "287.33",
         "PmntDate": "2012-03-29"
       }, {
         "DocNum": "1609025",
         "InvPayAmnt": "222.52",
         "PmntDate": "2012-03-29"
       } ],
     "payment_sum": "509.85"
    } ]

或者相同,就像 id 的对象(键值映射)一样:

{
    "BENV5271" : {
        "details": {
            "1610165": {
                 "InvPayAmnt": "100.00",
                 "PmntDate": "2012-03-29"
             }
         }
         "payment_sum": "100.00"
     },
     "BENV5635": {
         "details": {
             "1609026": {
                 "InvPayAmnt": "287.33",
                 "PmntDate": "2012-03-29"
             },
             "1609025": {
                 "InvPayAmnt": "222.52",
                 "PmntDate": "2012-03-29"
             }
        },
        "payment_sum": "509.85"
    }
}

您还可以使用 JSON 的数字类型来表示数字值,而不是字符串:-) 您应该立即从数据库创建该结构。正如您所看到的,CSV 并不是它的最佳表示形式,并且由于 JSON 和 XML 能够表示它,因此您不应该使用 SQL->CSV->JSON(table)->JSON(结构化)->XML 而是 SQL- >JSON(结构化)->XML,甚至更好的是 SQL->XML。您可以使用 Ajax 轻松读取 XML 并在 JavaScript 中更改其 DOM。

如果您确实需要在 JS 中将格式错误的对象重组为良好的结构,则代码如下:

var cards = {}; // an object indexed by the CardCodes;
for (var i=0; i<data.length; i++) { // loop through the received JSON
    // data[i] equals the "element" variable from your code
    var code = data[i].CardCode;
    if (! code in cards) { // there is no card with that code
        cards[code] = {
            vendorSum: data[i].payment_sum,
            name: data[i].CardName,
            addr: data[i].Address,
            ...
            pmtDetail: [] // create array for the details
        };
    } // else: element already created
    cards[code].pmtDetail.push({
        docNum: data[i].DocNum, 
        amount: data[i].InvPayAmnt
        ...
    }); // adds a new detail object to the array
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建用于 XML 导出的多维对象 的相关文章

  • IE localStorage 事件失火

    在 Internet Explorer 9 和 10 中 localStorage 实现意外地触发事件 这里有很棒的线索 Chrome 的 localStorage 实现存在错误 https stackoverflow com questi
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • Yii 未检测到骆驼案例操作

    伊伊正在给我404 Error如果我声明这样的操作 站点控制器 php public function actionRegisterUser 这就是我在main php label gt Register User url gt site
  • 在 javascript 中实现固定位置会导致 Safari 滚动时出现抖动

    固定位置不适用于我的用例 因为它固定在浏览器窗口上 您可能会处于文本在屏幕右侧之外且无法到达的状态 无论如何 我尝试使用绝对定位 然后调整javascript中的 顶部 它在 Firefox 和 Chrome 中运行良好 但在 Safari
  • 使用 Imagick 动态图像创建/Apache 标头

    在将现有的稳定网站转移到新服务器时 我遇到了一些使用 Imagick 动态创建图像的代码的间歇性问题 该代码解析 GET 查询 例如 example com image php ipid 750123 r 0 w 750 h 1000 然后
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 检查浏览器空闲的替代方法

    我有一个简单的网络信息亭 在鼠标未使用 jQuery 移动 30 秒后显示用户操作提示 var i null body wrap mousemove function clearTimeout i overlay fadeOut i set
  • 如何使用 Javascript OAuth 库不暴露您的密钥?

    看着Twitter OAuth 库 https dev twitter com docs twitter libraries 我看到了这个注释 将 JavaScript 与 OAuth 结合使用时要小心 不要暴露你的钥匙 然后 看着jsOA
  • 如果 jquery 验证激活,如何在单选按钮中放置红色边框[重复]

    这个问题在这里已经有答案了 我的问题是 如果 jquery 验证像示例图片中那样激活 我无法使单选按钮具有红色边框 任何人都可以帮我解决这个问题吗 http i38 photobucket com albums e149 eloginko
  • PHP date() 和 strtotime() 返回错误的月份 31 日

    我在用着date and strtotime 函数在下拉列表中显示接下来的 3 个月 PHP代码 echo date m Y strtotime 0 months echo date m Y strtotime 1 months echo
  • 根据文本内容从 jquery 对象中过滤元素

    我正在尝试使用contains带有 this 关键字 但它给出了错误 JS function var check ul find li filter function return this contains two css color r
  • highchart堆积柱每个类别的总数据

    我想获取每个类别的总数据 这point stackTotal只给出活动数据的总数 从我粘贴的代码示例中 我想知道每种水果的总消耗量 因此 即使我单击右上角图例上的乔的名字 这使得堆叠图表上的所有乔信息都处于非活动状态 我仍然可以知道约翰 简
  • 使用 Webmin 设置 cron 作业

    我正在尝试使用 Webmin 设置一个 Cron 作业每 5 分钟运行一次 它需要定位 php 文件并运行该文件中的 php 脚本 当我在 命令 字段中输入文件路径时 它不起作用 我只是想知道我做错了什么 以及我需要 Cron 作业运行的文
  • Array.of 与“[ ]”。何时使用 Array.of 而不是“[ ]”?

    当我发现时我正在读一些书Array of https developer mozilla org en docs Web JavaScript Reference Global Objects Array of 根据 MDN Array o
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht
  • VS Code 扩展 - 获取完整路径

    我正在为 VS Code 编写一个插件 我需要知道调用扩展的文件的路径 无论是从编辑器上下文菜单或资源管理器上下文菜单调用还是用户只需键入扩展命令 function activate context get full path of the
  • 使用 Swift 邮件程序发送邮件时出现错误 501

  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发
  • Google Drive 服务帐户上传的位置

    我正在尝试使用服务帐户将文件上传到我的 Google 云端硬盘 当我部署此代码时 我不希望用户给予授权 我希望他们上传到我的帐户 我通过 PHP 使用它 下面是我到目前为止的情况 这段代码是基于官方文档给出的例子 当我运行 php 脚本时
  • 使用
    元素作为 JavaScript 代码的输入。这是最好的方法吗?

    各位 显然 我是编码新手 所以最近完成了一些有关 HTML 和 Javascript 的 Lynda 课程后 我的简单 HTML 页面遇到了困难 基本上 我想要的是使用 JavaScript 进行基本计算 让用户使用 HTML 输入两个数字

随机推荐

  • safari 上的 onbeforeunload 不显示确认消息

    我的这部分代码适用于除Safari 10 iOS 和 OSX 问题是 Safari 会触发beforeunload event但它不会显示在确认消息中 function goodbye e console log goodbye en fa
  • Rscript 无法识别 setGeneric 函数

    我正在尝试将 R 脚本转换为客户端可以在批处理模式下运行的脚本 我的代码使用通用函数 接近开头的一个片段如下 setGeneric testInput function inputData params list standardGener
  • Visual Studio 2017 MSBuild 任务开发

    使用 Visual Studio 2017 RC 开发自定义 MSBuild 任务时 我遇到以下问题 只要添加其他依赖项 而不仅仅是Microsoft Build Utilities Core 使用 v15 1 0 preview 0004
  • 如何在 Android 应用程序中请求照片/媒体/文件权限

    在此输入图像描述 https i stack imgur com 2M033 png我希望我的应用程序请求照片 媒体 文件权限 因为第三方库需要它 任何人都可以告诉我要请求哪个特定权限 Thanks 文件 照片和媒体都保存在存储中 您的 A
  • 在 jboss 服务器中为 Web 应用程序进行新部署后,浏览器缓存文件未更新

    我正在使用 jboss Server 7 1 1 来部署 java web 应用程序 对于 js css 字体文件 浏览器缓存不会随着新的更改而更新 每次我们都坚持要求客户清除浏览器中的缓存以使新的更改生效 是否有任何我可以配置的配置 以便
  • VB6中列出文件夹中指定类型的所有文件的任何函数

    我想知道是否有一些内置函数适用于下面描述的场景 输入是父文件夹的路径 该函数必须做的是 它应该列出该父文件夹内的所有 zip 文件 父文件夹可以包含任意数量的子文件夹 这同样适用于子文件夹 任何人都可以帮我解决这个问题吗 VB版不是路障 V
  • Java 桌面应用程序 - 哪种技术? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要实现一个Java桌面应用程序 您会推荐哪种框架 SWT Swing Java FX 还是其他框架 我要求该应用程序应在 Windows x
  • Inno Setup TInputQueryWizardPage (CreateInputQueryPage) 上如何减小两个输入框之间的行距

    我有一个TInputQueryWizardPage具有 8 个用户输入的页面 这增加了向导页面 https stackoverflow com q 11778292 但所有值仍然不可见 有没有办法减少两个值之间的行距 以便所有值都以当前向导
  • http-proxy-middleware 中的 60 秒超时

    我在使用时看到 60 秒超时chimurai http proxy middleware in Create React App我不明白它是从哪里来的 我正在端口 5000 上运行 API 并进行配置setupProxy js as con
  • 在 matplotlib 中自定义 x 轴

    In the figure below each unit in the x axis represents a 10mins interval I would like to customize the labels of x axis
  • 如何在午夜更新应用程序小部件?

    我的应用程序有一个小部件 显示今天的日期 需要在午夜更新 该小部件在清单中定义为
  • 为什么使用 UIPanGestureRecognizer 移动对象时会出现延迟?

    我要搬家了UIView对象使用UIPanGestureRecognizer 我在屏幕上拖动手指的次数 我向同一方向移动视图的次数 仅在 X 方向上 向左或向右 Y 方向不变 它工作正常 但是 非常明显 delay 这是处理的方法UIPanG
  • 重命名 IAM 角色

    我在创建 IAM 角色以允许 lambda 函数访问 cloudwatch 日志并创建 EC2 卷快照时犯了一个拼写错误 有没有办法重命名角色 无论是使用控制台还是 AWS CLI 创建角色后 您无法编辑 IAM 角色 这在多个地方都提到过
  • 将 FASTA 文件中的多个序列添加到 python 中的列表中

    我正在尝试组织具有多个序列的文件 在此过程中 我尝试将名称添加到列表中 并将序列添加到与名称列表并行的单独列表中 我弄清楚了如何将名称添加到列表中 但我不知道如何将其后面的序列添加到单独的列表中 我尝试将序列行附加到空字符串中 但它将所有序
  • C# 如何判断 DVD 驱动器托盘是否打开?

    我有一个用 C 编写的 DVD 读取和刻录应用程序 我希望能够检测空驱动器 无磁盘 和打开驱动器之间的区别 编辑 经过更多谷歌搜索后 我认为更好的问题描述是 我想访问驱动器托盘状态 打开或关闭 我可以用 ManagementObjectSe
  • ASP.NET MVC5/IIS Express 无法调试 - 代码未运行

    我启动 VS2013 VB Net MVC5 Web 应用程序 在 HomeController About 方法中设置断点并运行 开始调试 导航到 About 页面并接收消息 Code not running The current Th
  • gnu make“删除中间文件”

    我有以下规则 define compile c ECHO CC lt Q CC CFLAGS c MD o lt The following fixes the dependency file See http make paulandle
  • 从原始数据的字节数组中获取缓冲图像

    我正在使用JNA 我从我的 C 方法中获取原始数据的字节数组 现在我陷入了如何使用这个原始数据字节数组在java中获取缓冲图像的困境 我尝试了一些方法来使其成为 tiff 图像 但我没有取得成功 这是我到目前为止尝试过的代码 这里我的字节数
  • 将子视图延迟加载到非分页 UIScrollView 中

    我正在尝试实现一个类似幻灯片的 UIScrollView 它将填充目录页面的缩略图 选择缩略图将导致主 UIScrollView 移动到所选页面 目录可能包含 100 200 页 我只想在需要时才延迟加载它们 我已经在启用分页的 UIScr
  • 创建用于 XML 导出的多维对象

    我正在导入一个包含大量发票数据的 csv 文件 该数据需要根据供应商 ID 分组在一起 以显示每个供应商的标题以及该供应商 ID 的所有发票的总和 然后在其下方显示每张单独的发票 该项目的目标是导入 CSV 向用户显示数据 允许通过选择框更