1

我正在使用一个脚本来使用他们的 API 在谷歌地图中搜索地点。我使用本地 PC (Windows 10) 作为我的开发环境。重要的代码部分如下:

$api_call_url ="https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=$lat,$lon&radius=$rad&type=$place_type&key=$Api_Key"
$api_call_response=Invoke-WebRequest $api_call_url
$api_call_obj = ConvertFrom-Json -InputObject $api_call_response
Add-Content "$file_name_json" $api_call_response

Google 返回的 json 存储在 $api_call_response 变量中,然后使用 Add-Content 附加到文本文件中。脚本完成并经过测试后,我将其移至生产环境(Windows Server 2016 Std)。运行脚本,发现json写入文本文件的方式不同。

这是从我的 Windows 10 PC 写入文本文件的内容(每个结果多行)

{
    "html_attributions" : [],
    "results" : [],
    "status" : "ZERO_RESULTS"
}

{

    "html_attributions" : [],
    "results" : [],
    "status" : "ZERO_RESULTS"
}

这是从我的 Windows Server 2016 写入文本文件的内容(每个结果一行)

 {   "html_attributions" : [],   "results" : [],   "status" : "ZERO_RESULTS"}
 {   "html_attributions" : [],   "results" : [],   "status" : "ZERO_RESULTS"}

如果我将变量 $api_call_response 写入输出到屏幕,它会显示多行。

我需要多行的输出,因为还有另一个脚本可以从我不需要的结果中清除文件,并且由于生成的文本文件附加了很多 json,因此它只从所有 json 中创建一个 json 文件。但它期望结果文件与我的开发环境编写的方式相同。显然,我试图避免修改清理脚本。

PSVersion on Windows Server 2016: 5.1.14393.3053
PSVersion on Windows 10: 5.1.17763.771

有什么想法吗?

4

2 回答 2

0

好吧,当使用写字板打开文件时,它是按照我需要的方式编写的,所以我想这必须是记事本显示文件的方式。

于 2019-12-18T20:19:11.507 回答
0

如果是将 unix 文本 (\n) 转换为 windows 文本 (\r\n) 的问题:

get-content file1 | set-content file2

或使用相同的文件:

(get-content file) | set-content file

记事本无法正确显示 unix 文本,但写字板可以。(虽然记事本可以处理 unicode no bom。)

其他转换方法: Unix换行符到windows换行符(在Windows上)

于 2019-12-18T21:06:02.787 回答