2016-04-19 5 views
0

У меня есть этот файл яваскрипт, который выглядит, как показано ниже:Json в Python с варом дает ошибку

var abc= { 
    "a" : { 
      "label": "Monthly", 
      "URL": "xyz.com", 
      "ArchTag": "M", 
      "archData": { 
       "Feb 2016":"20160229", 
       "Jan 2016":"20160129", 
       "Dec 2015":"20151231" 
}}}; 

поэтому я хочу способ изменить это и сказать, добавить новый месяц деталь. Я думаю, что это json внутри javascript. Итак, как можно отредактировать его стандартным способом.

+4

JavaScript не JSON. –

+0

правильный только видел ..это javascript, в котором есть json внутри ... вы можете мне помочь, как я могу добавить в него новую пару ключевых значений, например «Mar 2016»: «03312016». Я хотел бы сделать это стандартным способом ... – Piya

ответ

2

Ваш код Javascript, не JSON ...

С помощью этого кода в JS вы просто создать новый объект.

Но JSON - НЕ ЯЗЫК !!.! Json - это решение для эффективного хранения/передачи данных (в качестве assiocative массивов).

Просто попытайтесь не определить abc:

Ваш файл в формате JSON:

{ 
    "a" : 
    { 
      "label": "Monthly", 
      "URL": "xyz.com", 
      "ArchTag": "M", 
      "archData": 
      { 
       "Feb 2016":"20160229", 
       "Jan 2016":"20160129", 
       "Dec 2015":"20151231" 
      } 
    } 
} 
+1

OP может это знать. Они сказали в своем вопросе «var abc infront этого, который используется где-то еще, поэтому нельзя удалить». Ваш ответ - правильное объяснение, но не ответ на вопрос, который имеет OP. Вы можете предоставить решение о том, как обращаться с 'var =' спереди. – idjaw

+0

Правильно, просто увидишь .. это javascript, который выглядит как внутри json. Можете ли вы мне помочь, как я могу добавить в него новую пару ключевых значений, например «Mar 2016»: «03312016». Я хотел бы сделать это стандартным способом .. – Piya

+0

@Piya no JS не имеет JSON внутри ... JSON - это просто кросс-платформенный формат данных на разных языках, но это не относится к JS !! он выглядит как JS, но две вещи разные. Чтобы добавить его в JS, просто сделайте 'abc.a.archData [" Mar 2016 "] =" 03312016 "' – Vincent

4

Если вы можете полагаться на данные, глядя так же, как это каждый раз, то вы можете просто рубить бит, который останавливается причем JSON:

json_data = json.loads('{' + json_file.read().partition('{')[2]) 

(или использовать регулярное выражение, или все, что вы предпочитаете для манипуляций со строками)

Вы все равно должны опасаться, что JavaScript не то же самое, что JSON, поэтому вам нужна уверенность в том, что то, что вам дано, всегда будет назначением действительного ассоциативного массива JSON для переменной.

Если, с другой стороны, вам передают произвольный JavaScript, и вы ожидаете его оценить, тогда вам предстоит решить гораздо большую проблему. Что, если кто-то даст вам var xyz = "Monthly"; var abc = {"label" : xyz, "URL" : "xyz" + "." + "com"}?

Для решения этой более общей проблемы необходим механизм JavaScript, а не только парсер JSON. Например, js2py претендует на полный механизм JavaScript, написанный на Python, но я никогда не использовал его, поэтому я не могу рекомендовать его или рекомендовать.

Существуют также проблемы с безопасностью, которые необходимо учитывать при выполнении кода из ненадежных источников, помимо тех, которые вы считаете, если все, что вы делаете, - это разбор JSON из ненадежного источника. Поэтому, если вам нужно использовать движок JavaScript, убедитесь, что вы правильно поняли, как он изолирован.

2

Если вы не можете удалить var abc своего файла, прочитайте файл в строке, удалите первые символы строки и загрузите новую строку.

try: 
     with open(file) as json_file: 
      data = file.read() 
      json_data = json.loads(data[9:]) 
      pprint(json_data) 
    except Exception as e: 
     print(e) 

Если он не всегда написан var abc, тогда начните свою строку с первого {index.

1

Фактически содержимое файла не является json из-за упомянутого вами var. Вы должны удалить эту часть динамически:

json_text = json_file.read().replace('var abc=','') 
json_data = json.dumps(json_text) 
pprint(json_data) 
0

Вы можете использовать регулярное выражение для замены куска назначения вара:

with open('file.txt') as json_file: 
     data = json_file.read() 
     data = re.sub(r'^var\s*\S*\s*=\s*', '', data) 
     json_data = json.loads(data) 
Смежные вопросы