Проблема с конкатенацией строки исправления из списка и добавлением в массив JSON - PullRequest
0 голосов
/ 30 января 2020

Цель: получить все строки в CSV-файле (минимум 1 строка и более), добавить строку исправления и использовать переменную в массиве JSON.

Извините, если вопрос не связан. Я не уверен, какой правильный вопрос нужно задать.

Я хочу, чтобы формат "entryList" был таким, как показано ниже, для успешного размещения объекта JSON.

Но, ни один из работает следующий подход.

"entryList": [
 {"entry": ["value_from","csv",""]},
 {"entry": ["value_from","csv",""]},
 {"entry": ["value_from","csv",""]}
]

Дампы JSON (полный формат):

x={
"act.addEntries": {
"act.authToken": "test123",
"act.resourceId": "asdasda=123asd1",
"act.entryList": {
   "columns": [
     "domainName","threatInfo","riskScore"
   ],
   "entryList": [
     VARIABLE
   ]
  }
 }
}

"""
Sample CSV file
domainName,threatInfo,riskScore
xxx.xxx.com,Test1,
yyy.yyy.com,Test2,
zzz.zzz.com,Test3,
"""

# CSV to List
domainList=[]
with open('Desktop/domainMatches.csv', 'r') as file:
reader = csv.reader(file)

col = next(reader)

Подход 1 - Форматирование строк

Проблема: JSON В дампах отображается только 1 значение entryList. Я не смог найти правильный способ сбежать {}, поэтому это привело к нежелательному JSON объекту

for data in reader:
    domainList.append(data)
    line= '{{"entry": {}}}'.format(data)
    print(line)

**OUTPUT:**
{"entry": ['xxx.xxx.com', 'Test1', '']}
{"entry": ['yyy.yyy.com', 'Test2', '']}
{"entry": ['zzz.zzz.com', 'Test3', '']}
...
...
"entryList": [
  {{{}}}.format(line)
 ]

**OUTPUT - JSON Dumps:**
{
  "act.addEntries": {
    "act.authToken": "test123",
    "act.resourceId": "asdasda=123asd1",
    "act.entryList": {
      "columns": [
        "domainName",
        "threatInfo",
        "riskScore"
      ],
      "entryList": [
        "{{\"entry\": ['zzz.zzz.com', 'Test3', '']}}"
      ]
    }
  }
}

Aprroach 2 - + конкатенации

Здесь слишком много проблем. Совет при необходимости

line = ""
for value in reader:
    line+="{"
    line+=""" "entry": """
    line+=str(value)
    line+="},\n"

**OUTPUT:**
{"entry": ['xxx.xxx.com', 'Test1', '']},
{"entry": ['yyy.yyy.com', 'Test2', '']},
{"entry": ['zzz.zzz.com', 'Test3', '']},
...
...
"entryList": [
 """+line+"""
 ]
...