【问题标题】:Dart Parse JSON into TableDart 将 JSON 解析为表
【发布时间】:2014-07-02 13:16:42
【问题描述】:

我正在尝试弄清楚如何将 JSON 提要解析为 Dart 中的表格。我不确定我是否应该使用地图,但如果我这样做,我不确定如何提取数据。我想让一个单元格保存assetID,然后另一个单元格用于域名,另一个用于IP 地址。如果您需要更多信息,请告诉我。

飞镖:

void loadData()
{
  var url = "http://localhost:8080/***selectAll";

  //call the web server asynchronously
  var request = HttpRequest.getString(url).then(onDataLoaded);

}



void onDataLoaded(String response)
{
  TableElement table = querySelector("#domainTableSelector");
  //table.children.add();

  var jsonString = response;
 // print(jsonString);

  List<String> list = new List<String>();
  list.add(jsonString);

  for (var x = 0; x < list.length; x++) 
  {
    //create new table row 
    TableRowElement row = table.insertRow(x+1);
    TableCellElement cell = row.insertCell(x);
    cell.text = list.toString();
     // print(list);
  }
//  Iterator itr= list.iterator();
//
//  print("Displaying List Elements,");
//
//   while(itr.hasNext())
//    {
//      print(itr.next());
//    }
}

JSON

[{"serviceResponseValue":[{"assetId":"8a41250446b89b5f0146b04d49910023","oplock":0,"longitude":115.86,"domainName":"free-aus-trip.au","latitude":-31.95,"ipAddress":"6.0.0.6"},{"assetId":"8a49859246918966014691b1aac9000c","oplock":0,"longitude":-65.30,"domainName":null,"latitude":-24.18,"ipAddress":"4.0.0.4"},{"assetId":"8a49859246876566014691b1437512e4","oplock":0,"longitude":77.60,"domainName":"allmovies.cn","latitude":12.97,"ipAddress":"14.0.0.14"},{"assetId":"8a49850446b04b5f0146b04d49910000","oplock":0,"longitude":112.47,"domainName":"getrichez.cn","latitude":32.98,"ipAddress":"5.0.0.5"},{"assetId":"8a498592469189660146919b7a210006","oplock":0,"longitude":-37.61,"domainName":"googles.com","latitude":55.75,"ipAddress":null},{"assetId":"8a42250876b89b5f0876b04d49910763","oplock":0,"longitude":-68.90,"domainName":"lolcatzfun.net","latitude":-22.48,"ipAddress":"8.0.0.8"},{"assetId":"8a498592469189660146919f8d700008","oplock":0,"longitude":113.50,"domainName":"ccn.com","latitude":52.03,"ipAddress":null},{"assetId":"8a45250446b89b5f0876b04d49910187","oplock":0,"longitude":115.84,"domainName":"free-aus-trip.au","latitude":-31.86,"ipAddress":"7.0.0.7"},{"assetId":"8a49859246918966014691aeda76000a","oplock":0,"longitude":3.38,"domainName":"cashnow.net","latitude":6.52,"ipAddress":"2.0.0.2"},{"assetId":"8a49859246918966014691ae19df0009","oplock":0,"longitude":7.48,"domainName":"free-money.tv","latitude":9.07,"ipAddress":"222.222.222.222"},{"assetId":"8a498592469189660146919e09900007","oplock":0,"longitude":30.34,"domainName":"facebok.com","latitude":59.93,"ipAddress":"111.111.111.222"},{"assetId":"8a49859246918966014691b14375000b","oplock":0,"longitude":116.41,"domainName":null,"latitude":39.90,"ipAddress":"0.0.0.111"}],"messages":{"messages":[]}}]

【问题讨论】:

  • 您回答中的 JSON 是您服务器的响应?
  • 是的,这就是我需要使用的 JSON。

标签: java javascript json http dart


【解决方案1】:

要使用 JSON,你有一个很棒的东西:dart:convert => JSON

这里有一些使用示例:

var encoded = JSON.encode([1, 2, { "a": null }]);
var decoded = JSON.decode('["foo", { "bar": 499 }]');

我做了一些事情,但我不确定这是否完全符合您的需要

import 'dart:html';
import 'dart:convert';

void loadData()
{
  var url = "http://localhost:8080/***selectAll";

  //call the web server asynchronously
  var request = HttpRequest.getString(url).then(onDataLoaded);

}



void onDataLoaded(String response)
{
  TableElement table = querySelector("#domainTableSelector");
  //table.children.add();

  var jsonString = response;
 // print(jsonString);

  var jsonObject = JSON.decode(jsonString);

  for (var x = 0; x < jsonObject.length; x++) 
  {
    //create new table row 
    TableRowElement row = table.insertRow(x+1);

      for (var d in jsonObject[x]["serviceResponseValue"]) {
        TableCellElement cell = row.insertCell(x);
        cell.text = d["assetId"];

        cell = row.insertCell(x);
        cell.text = d["domainName"];

        cell = row.insertCell(x);
        cell.text = d["ipAddress"];

        print(d["assetId"]);
        print(d["domainName"]);
        print(d["ipAddress"]);

      }
     // print(list);
  }

}

【讨论】:

  • 差不多,代码返回了这个错误:异常:空对象没有方法'[]'。 NoSuchMethodError: 方法未找到: '[]' 接收者: null 参数: ["serviceResponseValue"]
  • 在哪一行抛出了这个异常?您可能需要添加一些空检查。
  • 第 30 行是错误开始的地方。 jsonObject 的 for 循环的开始。
  • 可以把打印jsonObject的结果放上来吗?
  • 不是,而是对象直接print(jsonObject)
【解决方案2】:

您将 JSON 解析为 Dart 数据结构,使用

import 'dart:convert' show JSON;

var decoded = JSON.decode(jsonString);

另见How to handle JSON in Dart(Alexandres 回答)

decoded 是一个 Dart 数据结构(列表、映射、值),您可以在调试器中对其进行迭代或调查。如果您需要进一步的帮助,请添加评论。

【讨论】:

  • 你能看看我在上面发布的关于 Vink 答案的评论吗?
猜你喜欢
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多