Загрузка json в DynamoDB с ошибкой строки - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть файл Json, содержащий следующую строку:

{
  "tenant_EntityID": {
    "s": "12345"
  },
  "enrtyDate": {
    "s": "7.9.2000 14:53:45"
  },
  "first_name": {
    "s": "Y7M9"
  },
  "last_name": {
    "s": "NUYE"
  },
  "gender": {
    "s": "male"
  },
  "birth_incorp_date": {
    "s": "9.3.1999 14:49:44"
  },
  "email": {
    "s": "0XPY9E@C20R.com"
  }
}

Когда я пытаюсь загрузить его в DynamoDB с помощью следующего кода:

import boto3
import json
import decimal

dynamodb = boto3.resource('dynamodb', region_name='us-west-2')

table = dynamodb.Table('Entities')

with open("C:/data/bigJson1.json") as json_file:
    Entities = json.load(json_file, parse_float = decimal.Decimal)
    for Entity in Entities:
        table.put_item(
            Item={
                'tenant_EntityID':Entity['tenant_EntityID'] ,
                'enrtyDate': Entity['enrtyDate'],
                'first_name': Entity['first_name'],
                'last_name': Entity['last_name'],
                'gender': Entity['gender'],
                'birth_incorp_date': Entity['birth_incorp_date'],
                'email': Entity['email']
                }

        )

Я получаю ошибку:

Traceback (most recent call last):
  File "C:/Freedom/Comparing json file.py", line 39, in <module>
    'tenant_EntityID':Entity['tenant_EntityID'] ,
TypeError: string indices must be integers

1 Ответ

0 голосов
/ 25 апреля 2018

Когда вы читаете строку JSON в Entities, результатом является dict, с ключами "tenant_EntityID" и так далее. Оператор for Entity in Entities повторяет этот диктет, давая вам ключи диктата, которые являются строками.

Похоже, вам нужно что-то похожее на это:

import boto3
import json
import decimal

dynamodb = boto3.resource('dynamodb', region_name='us-west-2')

table = dynamodb.Table('Entities')

with open("C:/data/bigJson1.json") as json_file:
    Entity = json.load(json_file, parse_float = decimal.Decimal)
    table.put_item(
        Item={
            'tenant_EntityID':Entity['tenant_EntityID'] ,
            'enrtyDate': Entity['enrtyDate']['s'],
            'first_name': Entity['first_name']['s'],
            'last_name': Entity['last_name']['s'],
            'gender': Entity['gender']['s'],
            'birth_incorp_date': Entity['birth_incorp_date']['s'],
            'email': Entity['email']
            }
        )

Я сам догадываюсь, что вам нужны значения, связанные с клавишами 's'.

Вы говорите, что он терпит неудачу "при запуске с 2 рядами". Скорее всего, JSON действительно должен быть представлен как список словарей, а не как один словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...