Helpers - компьютеры, интернет, программирование

Поиск определенного значения в файле JSON

У меня есть файл json, созданный функцией.

Файл выглядит так:

    {
  "images": [
    {
      "image": "/WATSON/VISUAL-REC/../IMAGES/OBAMA.jpg", 
      "classifiers": [
        {
          "classes": [
            {
              "score": 0.921, 
              "class": "President of the United States", 
              "type_hierarchy": "/person/President of the United States"
            }, 
            {
              "score": 0.921, 
              "class": "person"
            }, 
            {
              "score": 0.73, 
              "class": "ivory color"
            }, 
            {
              "score": 0.648, 
              "class": "Indian red color"
            }
          ], 
          "classifier_id": "default", 
          "name": "default"
        }
      ]
    }
  ], 
  "custom_classes": 0, 
  "images_processed": 1
}

Я написал функцию, которая будет проверять, присутствует ли значение «человек». Если значение "человек" присутствует, я буду увеличиваться на

#LOADING MY JSON FILE  
output_file = open(new_json_file).read()
output_json = json.loads(output_file)
#SETTING PERSON VALUE TO 0 
person = 0 
#CONDITIONS 
if "person" in output_json["images"][0]["classifiers"][0]["classes"][0]["class"] :
    person=1
    print (' FUNCTION : jsonanalysis // step There is a person in this image')
    return person
else :
    person = 0
    print (' FUNCTION : jsonanalysis // step There is a NO person in this image')
    return person

Я предполагаю, что это неправильный способ проверить, возвращается ли значение «человек» в ключе JSON, поскольку оно не находит значение. Что мне здесь не хватает?

Я просмотрел некоторые подобные темы и попытался адаптировать свою функцию:

Разбор значений из файла JSON с использованием Python?

Найти значение во вложенном словаре json в python

Но моя проблема - это ключ «класс». Существует несколько значений для ключа «класс» (например, «цвет слоновой кости»), а не только «человек».

15.02.2017

  • @ Роганджош: Хорошо 15.02.2017

Ответы:


1

Поскольку класс «человек» не обязательно является первым в первом элементе массива «классы». вы должны перебрать все элементы там.

for entry in in output_json['images'][0]['classifiers'][0]['classes']:
    if ('class' in entry) and (entry['class'] == 'person'):
        person += 1
        print (' FUNCTION : jsonanalysis // step There is a person in this image')
        return person

если вы хотите проверить, есть ли «человек» в записи класса в ЛЮБОМ из изображений/классификаторов, вам также нужно будет перебрать эти массивы:

for image_entry in output_json['images']:
    for classifier_entry in image_entry['classifiers']:
        for class_entry in in classifier_entry["classes"]:
            if class_entry['class'] == 'person':
                person += 1
                print (' FUNCTION : jsonanalysis // step There is a person in this image')
                return person

Обратите внимание, что если вы хотите подсчитать общее количество вхождений «человека», вы не должны возвращаться внутрь цикла, а только после его завершения.

15.02.2017

2

Попробуйте следующее:

1 Предположим, что ваши данные хранятся в python dict, если не пытаться их преобразовать.

   data_dict =   {
   "images": [
   {
  "image": "/WATSON/VISUAL-REC/../IMAGES/OBAMA.jpg", 
  "classifiers": [
    {
      "classes": [
        {
          "score": 0.921, 
          "class": "President of the United States", 
          "type_hierarchy": "/person/President of the United States"
        }, 
        {
          "score": 0.921, 
          "class": "person"
        }, 
        {
          "score": 0.73, 
          "class": "ivory color"
        }, 
        {
          "score": 0.648, 
          "class": "Indian red color"
        }
      ], 
      "classifier_id": "default", 
      "name": "default"
     }
   ]
  }
  ], 
  "custom_classes": 0, 
  "images_processed": 1
 }  
  1. Преобразуйте json в строку, используя следующее: import json

     data_str = json.dumps(data_dict)
    
  2. Теперь проверьте слово в строке (data_str):

     if 'person' in data_str:
          return True
     else:
          return False       
    
15.02.2017
  • Этот метод даст много плохих результатов. например, он будет совпадать, даже если есть строка «xxxpersonxxx» или если «person» является ключом и т. д. 15.02.2017
  • изменение формата было моим старым обходным путем. Но я хотел бы продолжить просмотр json. 15.02.2017
  • Данные уже json, и это может быть только фрагмент гораздо большего файла, поэтому у него может быть много ложных срабатываний для типов тестов, которые может захотеть выполнить ОП. 15.02.2017
  • да, это своего рода хак, реальным решением будет очень быстрый анализатор языка json c, а затем токенизация каждого слова, а затем будет выполняться поиск. 15.02.2017
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..