2015-12-30 3 views
0

Я делаю код, который случайным образом выбирает информацию из файла JSON и помещает его в уведомление о показе applescript. И может пройти через терминалПроблемы с файлом JSON

Я хотел бы сделать три разных списка в моем файле JSON, что все ссылки на это одно: random_name, random_sentence, random_sub вместо того, чтобы иметь один список и выбирать все слова только из этого.

Как это сделать? Должен ли я делать это с помощью словаря? Переменные? Создание других файлов JSON?

файл Python:

#!/usr/bin/python 

import json 
import random 
import subprocess 

def randomLine(): 
    jsonfile = "sentences.json" 
    with open(jsonfile) as data_file: 
     data = json.load(data_file) 

    # print len(data) 
    return random.choice(data) 

def executeShell(notif_string, notif_title, notif_subtitle): 
    applescript = 'display notification "%s" with title "%s" subtitle "%s"' % (notif_string, notif_title, notif_subtitle) 
    subprocess.call(["osascript", "-e", applescript]) 

def main(): 
    random_name = randomLine() 
    random_zin = randomLine() 
    random_sub = randomLine() 
    executeShell(random_name, random_zin, random_sub) 

if __name__ == '__main__': 
    main() 

JSON файл:

[ 
    "one", 
    "two", 
    "three", 
    "four", 
    "five", 
    "six" 
] 
+0

Ну я не понимаю. Что ты хочешь делать? Каков результат ожидания? Можете ли вы дать нам [mcve], пожалуйста? –

+0

С помощью этого кода все строки выбирают случайные слова из одного списка в файле JSON, такие как «один», «два», «три». Я хотел бы иметь отдельные списки в моем JSON-файле, который связывается со строками в моем файле python. Например, первая строка выбирает слова случайным образом из списка с «одним», «два», «три», а вторая строка выбирает случайным образом из другого списка, например: «aa», «bb», «cc». – Danisk

ответ

0

Это должно сделать работу. json.load() возвращает словарь, так что вы можете просто запустить random.choice() над ним:

import json 
import random 
import subprocess 

jsonfile = "sentences.json" 

def main(): 
    with open(jsonfile, "r") as file: 
     # You might want to add a sanity check here, file might be malformed 
     data = json.load(file) 

    random_name = random.choice(data["name"]) 
    random_zin = random.choice(data["zin"]) 
    random_sub = random.choice(data["sub"]) 
    subprocess.call(["osascript", "-e", "display notification \ 
     '{0}' with title '{1}' \ 
     subtitle '{2}'".format(random_name, random_zin, random_sub)]) 

if __name__ == '__main__': 
    main() 

Ваш исходный файл в формате JSON содержал только один список строк. Вот один с 3-х различных списков под названием «имя», «зин» & «суб»:

{ 
    "name":[ 
     "one", 
     "two", 
     "three" 
    ], 
    "zin":[ 
     "four", 
     "five", 
     "six" 
    ], 
    "sub":[ 
     "seven", 
     "eight", 
     "nine" 
    ] 
} 
+0

Возможно, вам стоит обратить внимание на проблему с исходным файлом JSON, о котором я говорю, чтобы ваш ответ был полезным, вы должны отметить в своем ответе вопрос с файлом JSON – PyNEwbie

+0

Nevermind. Исправлена ​​почта. – s0r00t

+0

Спасибо за ответ! Возможно, я делаю что-то неправильно, но он говорит: ошибка выполнения: переменная two не определена. Знаете ли вы, что я могу сделать, чтобы исправить это? @ s0r00t – Danisk

Смежные вопросы