如何将文本文件的内容转换为字符串,然后将此字符串插入JSON文件?
例如,如果文件包含:
this
is
a
sample
file
该脚本将生成:
"this\r\nis\r\na\r\nsample\r\nfile"
要插入JSON模板,请执行以下操作:
"something":"<insertPoint>"
产生:
"something":"this\r\nis\r\na\r\nsample\r\nfile"
我正在使用Powershell 5,并已设法加载文件,生成一些JSON并通过运行将其插入:
# get contents and convert to JSON
$contentToInsert = Get-Content $sourceFilePath -raw | ConvertTo-Json
# write in output file
(Get-Content $outputFile -Raw).replace('<insertPoint>', $contentToInsert) | Set-Content $outputFile
但是,还会添加许多其他不需要的字段。
"something":"{
"value": "this\r\nis\r\na\r\nsample\r\nfile"
"PSPath": "C:\\src\\intro.md",
"PSParentPath": "C:\\src",
"PSChildName": "intro.md",
etc...
最终,我正尝试通过JSON将小型富文本段发送到网页,但希望使用Markdown在本地编辑和存储它们。如果这没有任何意义,并且有更好的发送方式,请告诉我。
答案 0 :(得分:5)
iRon's answer有助于建议不要在PowerShell中使用 string 操作创建JSON,而是使用哈希表(或自定义对象)来构造数据并然后进行转换转换为JSON。
但是,仅凭这些不能解决您的问题:
PS> @{ something = Get-Content -Raw $sourceFilePath } | ConvertTo-Json
{
"something": {
"value": "this\nis\na\nsample\nfile\n",
"PSPath": "/Users/mklement/Desktop/pg/lines.txt",
# ... !! unwanted properties are still there
}
该问题的根本原因是Get-Content
使用元数据NoteProperty
修饰其输出的字符串,并且ConvertTo-Json
当前是总是包括这些。
Get-Content
时退出这种修饰。ConvertTo-Json
忽略原始.NET类型(例如 strings )的额外属性。最简单的解决方法是使用.psobject.baseobject
访问基础.NET实例,该实例绕过PowerShell用于提供额外属性的不可见包装对象:< / p>
PS> @{ something = (Get-Content -Raw $sourceFilePath).psobject.baseobject } |
ConvertTo-Json
{
"something": "this\nis\na\nsample\nfile\n"
}
答案 1 :(得分:2)
Get-Content
结果中的元数据之外,只是一般建议:
不要在任何Json
内容中戳戳()(替换,插入等)。
相反,请先修改对象 (如有必要,请使用ConvertFrom-Json
来还原对象),然后再将其转换为{{1} }文件。
在此示例中,我将为此使用ConvertTo-Json
和hash-table
:
Json
结果:
@{'something' = @'
this
is
a
sample
file
'@
} | ConvertTo-Json
答案 2 :(得分:0)
您可以使用import cv2
import numpy as np
def getSlopeOfLine(line):
xDis = line[0][2] - line[0][0]
if (xDis == 0):
return None
return (line[0][3] - line[0][1]) / xDis
if __name__ == '__main__':
inputFileName = '/Users/James/Desktop/img.jpg'
img = cv2.imread(inputFileName)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
lines = cv2.HoughLinesP(gray, 1, np.pi / 180, 100, 30, 2)
parallelLines = []
for a in lines:
for b in lines:
if a is not b:
slopeA = getSlopeOfLine(b)
slopeB = getSlopeOfLine(b)
if slopeA is not None and slopeB is not None:
if 0 <= abs(slopeA - slopeB) <= 0.6:
parallelLines.append({'lineA': a, 'lineB': b})
for pairs in parallelLines:
lineA = pairs['lineA']
lineB = pairs['lineB']
leftx, boty, rightx, topy = lineA[0]
cv2.line(img, (leftx, boty), (rightx, topy), (0, 0, 255), 2)
cv2.imshow('linesImg', img)
cv2.waitKey(0)
cmdlet首先将Out-String
的输出强制转换为扁平字符串:
Get-Content
这将产生:
@{ "something" = (Get-Content lines.txt | Out-String) } | ConvertTo-Json