【问题标题】:JavaScript: Parse jsonstringJavaScript:解析 jsonstring
【发布时间】:2022-01-10 04:12:03
【问题描述】:

我有一个由 C# razor page 方法返回的 json 字符串,如下所示:

var data = 
{"Transactions":"[{\"BatchID\":\"814C87D9-7037-4E66-97EC-5861D2712997\",\"BatchOpenStatus\":\"Y\",\"Time\":\"2021-09-02T10:41:26.318\",\"recType\":\"Trip\",\"RevisionNum\":0,\"ID\":\"e1ddc1ac-0c0c-11ec-b55b-e2b9dfec84c8\",\"Payment Type\":\"2\",\"Tag Agency\":\"0046\",\"Transponder ID\":\"309999\",\"Plate#\":\"\",\"State\":\"\",\"Type\":\"PAS\",\"Class\":\"4\",\"AVC Class\":\"4\",\"VehSpeed\":\" \",\"TagStatus\":\"0\",\"TagClass\":\"2\",\"Plaza\":\"072\",\"Lane\":\"41\"},{\"BatchID\":\"814C87D9-7037-4E66-97EC-5861D2712997\",\"BatchOpenStatus\":\"Y\",\"Time\":\"2021-09-02T10:53:26.229\",\"recType\":\"Trip\",\"RevisionNum\":0,\"ID\":\"7c5dccbe-0c0e-11ec-b55b-e2b9dfec84c8\",\"Payment Type\":\"2\",\"Tag Agency\":\"0046\",\"Transponder ID\":\"309119\",\"Plate#\":\"JSON06\",\"State\":\"\",\"Type\":\"PAS\",\"Class\":\"4\",\"AVC Class\":\"4\",\"VehSpeed\":\" \",\"TagStatus\":\"0\",\"TagClass\":\"2\",\"Plaza\":\"072\",\"Lane\":\"41\"},{\"BatchID\":\"814C87D9-7037-4E66-97EC-5861D2712997\",\"BatchOpenStatus\":\"Y\",\"Time\":\"2021-09-02T13:05:26.17\",\"recType\":\"Trip\",\"RevisionNum\":0,\"ID\":\"fb707240-0c20-11ec-b55b-e2b9dfec84c8\",\"Payment Type\":\"2\",\"Tag Agency\":\"0046\",\"Transponder ID\":\"377159\",\"Plate#\":\"470E03\",\"State\":\"\",\"Type\":\"PAS\",\"Class\":\"2\",\"AVC Class\":\"2\",\"VehSpeed\":\" \",\"TagStatus\":\"0\",\"TagClass\":\"2\",\"Plaza\":\"040\",\"Lane\":\"2\"}]","ReturnCode":0,"ReturnString":"Succesful"}

如何在我的 javascript 中提取交易?这是我当前的代码:

var _transactions = [];
var allData= jQuery.parseJSON(data);
_transactions = JSON.stringify(eval("(" + allData.Transactions + ")")); 

此代码适用于少量“交易”,但不适用于数千条记录。

感谢任何帮助。

【问题讨论】:

  • 不清楚你在问什么。不知道为什么这里有evaldata.Transactions 已经是一个字符串,可以按原样解析。你的意思是字符串是'var data = {"..."}'?这与parseJSON(data) 不一致。
  • var transactions = JSON.parse(data.Transactions)
  • 交易是一个字符串。
  • 这就是JSON.parse() 所做的;将 JSON 字符串解析为对象。如果您有一个包含数千条记录的 JSON 字符串,并且您说它运行得太慢,您是在要求更快的 JSON 解析器吗?在客户端(例如浏览器)或服务器上?如果是客户,无论如何您都不能对数千条记录做任何有意义的事情——这就是分页的用途。
  • 这就是为什么我将它解析为一个数组......从你的问题来看,这似乎是你想要的。

标签: javascript json parsing


【解决方案1】:

不清楚你为什么使用 eval,甚至为什么使用 jQuery

这里是纯 JS

const transactions = JSON.parse(data.Transactions)
console.log(transactions)
// example of getting the item values - use [""] for strings with spaces
transactions.forEach(transaction => console.log(transaction["Transponder ID"]))
<script>
const data = {"Transactions":"[{\"BatchID\":\"814C87D9-7037-4E66-97EC-5861D2712997\",\"BatchOpenStatus\":\"Y\",\"Time\":\"2021-09-02T10:41:26.318\",\"recType\":\"Trip\",\"RevisionNum\":0,\"ID\":\"e1ddc1ac-0c0c-11ec-b55b-e2b9dfec84c8\",\"Payment Type\":\"2\",\"Tag Agency\":\"0046\",\"Transponder ID\":\"309999\",\"Plate#\":\"\",\"State\":\"\",\"Type\":\"PAS\",\"Class\":\"4\",\"AVC Class\":\"4\",\"VehSpeed\":\" \",\"TagStatus\":\"0\",\"TagClass\":\"2\",\"Plaza\":\"072\",\"Lane\":\"41\"},{\"BatchID\":\"814C87D9-7037-4E66-97EC-5861D2712997\",\"BatchOpenStatus\":\"Y\",\"Time\":\"2021-09-02T10:53:26.229\",\"recType\":\"Trip\",\"RevisionNum\":0,\"ID\":\"7c5dccbe-0c0e-11ec-b55b-e2b9dfec84c8\",\"Payment Type\":\"2\",\"Tag Agency\":\"0046\",\"Transponder ID\":\"309119\",\"Plate#\":\"JSON06\",\"State\":\"\",\"Type\":\"PAS\",\"Class\":\"4\",\"AVC Class\":\"4\",\"VehSpeed\":\" \",\"TagStatus\":\"0\",\"TagClass\":\"2\",\"Plaza\":\"072\",\"Lane\":\"41\"},{\"BatchID\":\"814C87D9-7037-4E66-97EC-5861D2712997\",\"BatchOpenStatus\":\"Y\",\"Time\":\"2021-09-02T13:05:26.17\",\"recType\":\"Trip\",\"RevisionNum\":0,\"ID\":\"fb707240-0c20-11ec-b55b-e2b9dfec84c8\",\"Payment Type\":\"2\",\"Tag Agency\":\"0046\",\"Transponder ID\":\"377159\",\"Plate#\":\"470E03\",\"State\":\"\",\"Type\":\"PAS\",\"Class\":\"2\",\"AVC Class\":\"2\",\"VehSpeed\":\" \",\"TagStatus\":\"0\",\"TagClass\":\"2\",\"Plaza\":\"040\",\"Lane\":\"2\"}]","ReturnCode":0,"ReturnString":"Succesful"}</script>

【讨论】:

  • 我有一个 DevExpress DataGrid,我将数据源绑定到事务数组。我似乎无法做到。我会尝试 DevExpress 支持。感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 2013-10-08
  • 1970-01-01
  • 2018-05-16
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多