我需要解析特定的json文件,但卡住了

nbysray5  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(237)

有描述关键字的元素数量可变的json文件,下面是典型的例子:

{"keywords":[{"keyword":"halloween","score":0.9621220167107003},
{"keyword":"pumpkin","score":0.9527655356551675},
{"keyword":"nature","score":0.8530320061364176},
{"keyword":"animal","score":0.7936456829239327}],"status":"ok"}

脚本应该解析这个json,我需要得到一行关键字,格式如下:

,,,"halloween,pumpkin,nature,animal"

正如我已经说过的,条目的数量可能不同,例如从10到100。
老实说,我被那项任务缠住了。有人能帮帮我吗?

setlocal enabledelayedexpansion
  set keywords=""

  rem Loop through each line of the keywords.txt file
  for /f "skip=1 tokens=2 delims={" %%b in (keywords.txt) do (
    rem Extract the keyword from the current line
    set keyword=%%b
    set keyword=!keyword:"keyword":"!
    set keyword=!keyword:",score":!
    set keyword=!keyword:,!

    rem Add the keyword to the keywords variable
    set keywords=!keywords!,!keyword!
  )

但这没有任何帮助

qcuzuvrc

qcuzuvrc1#

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following settings for the source directory and filename are names
rem that I use for testing and deliberately include names which include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files"
SET "filename1=%sourcedir%\q75438837.txt"

SET "words="
SET "snagnext="

FOR /f "usebackqdelims=" %%e IN ("%filename1%") DO (
 SET "LINE=%%e"
 FOR %%y IN ({ } [ ] :) DO SET "line=!line:%%y=,!"
 FOR %%y IN (!line!) DO (
  IF DEFINED snagnext SET "words=!words!,%%~y"
  SET "snagnext="
  IF "%%~y"=="keyword" SET "snagnext=Y"
 )
)
SET "words=%words:~1%"
SET words
GOTO :EOF

请注意,如果文件名不包含空格之类的分隔符,则可以省略usebackq%filename1%周围的引号。
读每一行;用逗号替换每个冒号和各种括号。结果是line中的一个简单的逗号分隔列表。一些元素可能会被引起来。
使用一个简单的for迭代每行的所有元素,如果去掉引号并重新报价的元素是"keyword",则将snagnext标志设置为y
定义snagnext时出现的下一个元素累积到words列表中。
提示:使用set "var=value"来设置字符串值--这样可以避免由尾随空格引起的问题。不要指定"或终止反斜杠或空格。从元素构建路径名--与直觉相反,这可能会使过程更容易。如果使用语法set var="value",那么引号将成为指定值的一部分。

2hh7jdfx

2hh7jdfx2#

要解析JSON,请使用PowerShell的帮助:
下面是一个简单的单行batch-file示例:

@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile ',,,"""' + $((Get-Content 'keywords.txt' -Raw | ConvertFrom-Json).keywords.keyword -join ',') + '"""'& Pause

相关问题