В настоящее время у меня есть строковый объект JSON, который выглядит следующим образом: (Важно, это объект, который я должен преобразовать в строку, и ПОСЛЕ того, как мне нужен подсчет длины)
Я делаю вызов базы данных, которая возвращает result.
Я думаю обернуть мой результат так: var myData = JSON.stringify(result);
Это производит следующее, намного больше:
myData = {
"0":[{"id": 50, "product_id": 'blah blah', etc}, {"id": 52, "product_id": 'blah blah', etc}, {"id": 50, "product_id": 'blah blah', etc}],
"1":[{"id": 50, "product_id": 'blah blah', etc}, {"id": 52, "product_id": 'blah blah', etc}, {"id": 50, "product_id": 'blah blah', etc}],
"2":[{"id": 50, "product_id": 'blah blah', etc}, {"id": 52, "product_id": 'blah blah', etc}, {"id": 50, "product_id": 'blah blah', etc}]
}
Я пробовал все, что мог придумать, чтобы получить длину корневого уровня. В этом примере их будет 3. Мне нужно знать длину, чтобы я мог запустить цикл, выбирая каждый из них.
Как я могу это сделать?
Я пытался для (var data in myData) и я пытался Object.keys(myData).length.
Я вошел в консоль Ojbect.keys(myData).length, и результат 9234.
Ничто из того, что я пробовал, не работает.
Я не вижу никакого JSON в этом вопросе. "не работает" - это не описание проблемы. Опубликуйте минимальный воспроизводимый пример.
Обе вещи, которые, как вы говорите, вы пробовали, должны работать для подсчета ключей, поэтому, пожалуйста, покажите, как вы их пробовали.
@melpomene он специально сказал после, что он вызывает stringify, что, я полагаю, означает JSON.stringify
@FabricioG, ты не можешь использовать реверс, JSON.parse, а затем использовать Object.keys().length?
@MatthewHerbst Как знание длины поможет в цикле по строке JSON?
Object.keys(myData).length возвращает 3. Если myData является строковым JSON, тогда JSON.parse.
@melpomene вопрос, который он задает: как мне рассчитать, сколько значений находится в корневом ключе в строковом объекте JSON?
@MatthewHerbst Вопрос, который я задаю: как это будет полезно для циклического прохождения строкового объекта?
Я не пробовал JSON.parse, позвольте мне попробовать @MatthewHerbst
@melpomene почему это важно? Почему кто-то хочет что-то сделать, не влияет на правильность вопроса или нет.
Мне нужно найти счетчик, потому что он собирается запустить другой скрипт на основе «группы». В частности, json отправляется в программу под названием Illustrator, которой для запуска нужны данные в виде строки json, тогда мне нужно подсчитать группу, чтобы создать артборд для каждого из них. @МэттьюХербст
@FabricioG да, это решит вашу проблему: const length = Object.keys(JSON.parse(jsonData)).length где jsonData — это значение, возвращаемое вам сервером.
Просто не вызывайте JSON.stringify в первую очередь (точнее, вызывайте JSON.stringify только в конце, когда вам нужна строка; выполняйте всю свою основную работу над реальным объектом).
Это должна быть строка... Поток от js к jsx, и для этого требуется строка json. Это CEP -> JSX Adobe, рабочий процесс @melpomene
@melpomene, вы предполагаете, что у него есть доступ к объекту JSON в его контексте.
@MatthewHerbst отлично сработал, СПАСИБО!
сначала сделайте => jsonlint.com ваш json недействителен.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Object.keys(myData).length) работает отлично
var myData = {
"0": [
{ "id": 50, "product_id": "blah blah", "etc" : 44 },
{ "id": 52, "product_id": "blah blah", "etc" : 44 },
{ "id": 50, "product_id": "blah blah", "etc" : 44 }
],
"1": [
{ "id": 50, "product_id": "blah blah", "etc" : 44 },
{ "id": 52, "product_id": "blah blah", "etc" : 44 },
{ "id": 50, "product_id": "blah blah", "etc" : 44 }
],
"2": [
{ "id": 50, "product_id": "blah blah", "etc" : 44 },
{ "id": 52, "product_id": "blah blah", "etc" : 44 },
{ "id": 50, "product_id": "blah blah", "etc" : 44 }
]
}
console.info(Object.keys(myData).length) // => 3Я понятия не имею, кто поставил вам минус и почему.
Думаю, я добавлю это как ответ :)
Данные, которые вы получаете с сервера, находятся в формате JSON, так как вы обернули их JSON.stringify. Теперь вам нужно сначала проанализировать данные, прежде чем вы сможете что-то с ними сделать. Используйте JSON.parse для этого:
const serverJSONResponse = getJSONFromServer();
const myData = JSON.parse(serverJSONResponse);
const length = Object.keys(myData).length;
Обратите внимание, что есть способы сообщить, что вы используете на клиенте, чтобы сделать запрос, что ответ будет в формате JSON, а затем он автоматически вызовет JSON.parse для вас, чтобы вам не нужно было делать это вручную каждый раз.
Извините, что исправил, так оно и есть на самом деле, мой плохой @NickParsons