不将 Json 数据保存到文件中
Posted
技术标签:
【中文标题】不将 Json 数据保存到文件中【英文标题】:Not saving Json data to file 【发布时间】:2021-05-05 01:27:40 【问题描述】:我正在抓取一个页面,并收集一些信息以保存在一个文件中,然后使用 npm 中一个名为“write-json”的库写入 json 中的文件。
但是我遇到了一些问题,我无法保存文件中的所有数据,它会在某个点停止,我正在发送的数据示例:
数据:
'Sat, 31 de January de 2021': [
PM:
'1': '7498-25',
'2': '2991-23',
'3': '8552-13',
'4': '6850-13',
'5': '6438-10',
'6': '2329-8',
'7': '426-7'
,
PT:
'1': '5767-17',
'2': '2282-21',
'3': '5051-13',
'4': '0646-12',
'5': '0133-9',
'6': '3879-20',
'7': '160-15'
,
PV:
'1': '8888-22',
'2': '6620-5',
'3': '3566-17',
'4': '9635-9',
'5': '0679-20',
'6': '9388-22',
'7': '838-10'
],
'Sat, 30 de January de 2021': [
FD:
'1': '7619-5',
'2': '1445-12',
'3': '1193-24',
'4': '6477-20',
'5': '6819-5',
'6': '3553-14',
'7': '409-3'
,
CR:
'1': '7911-3',
'2': '6040-10',
'3': '2143-11',
'4': '1706-2',
'5': '0251-13',
'6': '8051-13',
'7': '782-21'
,
PTN:
'1': '0594-24',
'2': '7823-6',
'3': '4314-4',
'4': '6884-21',
'5': '6124-6',
'6': '5739-10',
'7': '646-12'
]
文件中保存的是:
"Sat, 31 de January de 2021": [],
"Sat, 30 de January de 2021": []
这里是我的代码示例:
var jsonfile = [];
var $ = cheerio.load(body);
var results = $('table');
var banc_results = [];
var finalResult = ;
results.each(function( index, element )
var data = $(this).find( "caption" ).text().trim();
var thead = $(this).find( "thead > tr > th" );
thead.each(function(index, element)
var banc = $(this).text();
if(banc != "")
banc_results[banca] = ;
);
$(this).find('tbody tr').each(function (i, el)
var $tds = $(this).find('td')
var counter = i +1;
$tds.each(function(index, element)
var $th = $(this).closest('table').find('th').eq($(this).index());
if($th.text() != "")
banc_results[$th.text()][counter] = $(this).text();
);
);
finalResult[data].dados = banc_results;
);
jsonfile = finalResult;
console.log(jsonfile);
writeJson.sync('de-data.json', jsonfile);
【问题讨论】:
【参考方案1】:您尝试保存的数据不是合法的 JSON 对象。 在第一种方法中,您应该在数组中包含括号,例如,第一个日期第一个元素:
PM:
'1': '7498-25',
'2': '2991-23',
'3': '8552-13',
'4': '6850-13',
'5': '6438-10',
'6': '2329-8',
'7': '426-7'
,
其他元素依此类推。 抱歉,我在您的代码中找不到如何更正此问题。
【讨论】:
唯一的问题是我使用了一个动态属性 finalResult[data].dados = banc_results。我如何使用它的数据(日期)作为键?【参考方案2】:如前所述,您没有使用有效的 JSON 语法。正确的应该是这样的:
"Sat, 31 de January de 2021":
"PM":
"1":"7498-25",
"2":"2991-23",
"3":"8552-13",
"4":"6850-13",
"5":"6438-10",
"6":"2329-8",
"7":"426-7"
因此,不要为 banc_results 创建一个数组,而是创建一个对象
【讨论】:
【参考方案3】:您正在使用数组表示法 ([...]
) 作为对象(命名键值对)。
Array 用于不带名称的元素列表,而Object 将名称分配给值。
对于您使用[ "name": "value" ]
的所有区域,将其更改为 "name": "value"
。
【讨论】:
唯一的问题是我使用了一个动态属性 finalResult[data].dados = banc_results; 我如何使用数据(日期)作为键? @Pedro 您可以访问对象中的命名属性,foo[n]
表示法可以访问数组的元素或对象的属性。 (实际上,数组不就是带有数字键的花哨对象吗?)
但例如我正在创建一个对象 var position = 1: $(this).text();,其中 1 是一个名为 counter 的变量,但在使用变量作为键时不起作用我应该怎么放?我的例子: var position = counter: $(this).text(); finalResult[数据].push(位置);
如果我火了,我应该放 var position = [counter]: $(this).text();以上是关于不将 Json 数据保存到文件中的主要内容,如果未能解决你的问题,请参考以下文章