【问题标题】:Nesting Json Data with jquery使用 jquery 嵌套 Json 数据
【发布时间】:2017-02-08 14:27:56
【问题描述】:

我有来自 csv 文件的这些数据,我必须在 jquery 的依赖下拉列表中使用它。我不知道是否可以为我已经编码的内容嵌套我收到的数据。

CSV 文件

Banco   Tarjeta Cuotas  Medio_Pago  Coeficiente TEA      CFT
Santander Visa    1   modulodepago2    1        0.00%    0.00%
Santander Visa    1        nps        1.0262    18.56%  22.84%
Frances   Visa    1   modulodepago2    1         0.00%  0.00%
Frances  Master   2        nps        1.0262    18.56%  22.84%

我的json数据是这样的

 [{"banco":"Santander","tarjeta":"Visa","cuotas":"1","medio_pago":"modulodepago2",
 "coeficiente":"1","tea":"0.00%","cft":"0.00%"},
 {"banco":"Santander","tarjeta":"Visa","cuotas":"1","medio_pago":"nps",
 "coeficiente":"1.0262","tea":"18.56%","cft":"22.84%"} ...
  etc...

有没有办法像这样嵌套这个 json 数据(+ 添加唯一的名称和 id)?

var myJson = {
  "banco": [
      {
          "name": "Santander",
          "id": "Santander",
          "tarjeta": [
              {
                  "name": "Visa",
                  "id": "SantanderVisa",
                  "cuotas": [
                      {
                          "name": "1",
                          "id": "SantanderVisa1",
                          "medio_pago": "modulodepago2"
                          "coeficiente": "1",
                          "tea": "0.00%",
                          "cft": "0.00%",
                      },
                      {
                          "name": "1",
                          "id": "SantanderVisa2",
                          "medio_pago": "nps"
                          "coeficiente": "1.0262",
                          "tea": "18.56%",
                          "cft": "22.84%",
                      }
                  ]
              }
          ]
      },
      {
          "name": "Frances",
          "id": "Frances",
          "tarjeta": [
              {
                  "name": "Visa",
                  "id": "FrancesVisa",
                  "cuotas": [
                      {
                          "name": "1",
                          "id": "FrancesVisa1",
                          "medio_pago": "modulodepago2"
                          "coeficiente": "1",
                          "tea": "0.00%",
                          "cft": "0.00%",
                      }
                  ]
              },
              {
                  "name": "Master",
                  "id": "FrancesMaster",
                  "cuotas": [
                      {
                          "name": "2",
                          "id": "FrancesMaster2",
                          "medio_pago": "nps"
                          "coeficiente": "1.0262",
                          "tea": "18.56%",
                          "cft": "22.84%",
                      }
                  ]
              }
          ]
      }
  ]
}

【问题讨论】:

  • 很有可能。你能分享一个小而完整的样本吗?
  • 是 csv 还是完整的 json 数据?
  • 可以对对象进行排序:stackoverflow.com/questions/1069666/…
  • JSON 数据。 2-4个物体就可以了。 @圣地亚哥
  • 你能给我答案吗?

标签: javascript jquery json csv


【解决方案1】:

您需要按键分组。一个简单的方法是使用LodashUnderscore.js

我使用Papa Parse 将 CSV 数据转换为 JSON。

var csvData = $('#csv-data').text().trim();
var jsonData = Papa.parse(csvData, { delimiter:',', header:true }).data;

var transformedJson = {
  banco : _.chain(jsonData)
  .groupBy('Banco')
  .toPairs()
  .map(banco => {
    return {
      name : banco[0],
      id: banco[0],
      tarjeta : _.chain(banco[1])
      .groupBy('Tarjeta')
      .toPairs()
      .map(tarjeta => {
        return {
          name: tarjeta[0],
          id: banco[0] + tarjeta[0],
          cuotas: _.map(tarjeta[1], cuota => {
            return {
              name: cuota['Cuotas'],
              id: banco[0] + tarjeta[0] + cuota['Cuotas'],
              medio_pago: cuota['Medio_Pago'],
              coeficiente: cuota['Coeficiente'],
              tea: cuota['TEA'],
              cft: cuota['CFT']
            }
          })
        };
      })
    }
  }).value()
}

console.log(JSON.stringify(transformedJson, null, 2));
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/4.1.4/papaparse.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
<textarea id="csv-data" style="display:none" rows="5" cols="72">
Banco,Tarjeta,Cuotas,Medio_Pago,Coeficiente,TEA,CFT
Santander,Visa,1,modulodepago2,1,0.00%,0.00%
Santander,Visa,1,nps,1.0262,18.56%,22.84%
Frances,Visa,1,modulodepago2,1,0.00%,0.00%
Frances,Master,2,nps,1.0262,18.56%,22.84%
</textarea>

【讨论】:

    【解决方案2】:

    试试这样的 您只需使用对象名称即可获得其他对象的所有 medio_pago。 我还没有测试过,但我相信这对你有用。

    var Json = ...
    
    $.each(Json, function(i, item) {
        alert(myJson[i].banco.tarjeta.cuotas.medio_pago);
    });
    

    【讨论】:

    • 未捕获的类型错误:无法使用 'in' 运算符在 [{"banco":"Otros bancos o tarjetas","tarjeta":"Cencosud","cuotas":" 中搜索 'length' 1","medio_pago":"mercadopago_standard","coeficiente":"1","tea":"0.00%","cft":"0.00%"},{"banco":"Otros bancos o tarjetas", "tarjeta":"Cencosud","cuotas":"6","medio_pago":"mercadopago_standard","coeficiente":"1","tea":"0.00%","cft":"0.00%"}
    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多