2016-12-23 2 views
-1

У меня есть Java JSON Object, его формат [{a = b}], я пытаюсь передать этот объект в javascript как объект JSON, но его отсутствует "на обоих ключ и значение, а также с «=» вместо «:»преобразование 'malformed' java json object в javascript

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

Синтаксический оказывается очень сложным, как? фактический JSON является вложенным и отсутствием котировок и отсутствием указаний на вложенность.

Образец данных «JSON»:

[{wwnType = Virtual, serialNumberType = Virtual, connections = [], modified = 2016-10-29T19: 00: 04.457Z, macType = Virtual, category = server-profile-templates, serverHardwareTypeUri =/rest/server- аппаратные типы/32006464-D3C6-4B4E-8328-47A193C6116C, bios = {overriddenSettings = [], manageBios = false}, firmware = {firmwareBaselineUri = null, manageFirmware = false, forceInstallFirmware = false, firmwareInstallType = null}, boot = { manageBoot = true, order = [CD, Floppy, USB, HardDisk, PXE]}, hideUnusedFlexNics = true, bootMode = null, state = null, affinity = Bay, localStorage = {controllers = []}, type = ServerProfileTemplateV1, status = OK, description =, eTag = 1477767604457/1, serverProfileDescription = test, name = test, created = 2016-10-29T19: 00: 04.428Z, enclosureGroupUri =/rest/enclosure-groups/e989621b-930e-40e7-9db0-a6ddbf841709 , uri =/rest/server-profile-templates/db1dbdcc-4237-4452-acc3-cf9dfdc75365, sanStorage = {manageSanStorage = false, volumeAtta chments = []}}]

Благодаря

ответ

1

Это не собирается быть простым. Тем не менее, я думаю, вы можете сделать это, не написав полноценный парсер, если вы готовы написать токенизатор или лексический анализатор, чтобы разбить входную строку на токены. Базовый план может быть примерно таким:

  1. Преобразуйте свой вход в список токенов. Я не знаю, каков формат вашего ввода, поэтому вам нужно будет сделать свой собственный анализ. Токен будет чем-то вроде одного символа [, ], {, }, запятая, =; или идентификатор (a или b в вашем примере, но я не знаю, какие могут быть допустимые форматы); или, может быть, строковый литерал в кавычках или числовой литерал, в зависимости от ваших потребностей.

  2. Пройдите через строку и замените необходимые вам жетоны. Основываясь на вашем примере, я бы сказал, что после {: если первый токен после этого является идентификатором, поместите его в кавычки; если второй токен после этого равен =, измените его на :; если третий токен после этого является идентификатором, поместите его в кавычки. То же самое можно сделать после запятой, но вам нужно будет отслеживать, является ли запятая разделителем для списка пар ключ-значение в объекте или список значений в массиве. Для этого вам может понадобиться держать стек, который вы нажимаете, когда вы видите [ или {, и pop при появлении } или ], чтобы вы знали, находитесь ли вы внутри объекта или массива.

  3. После того, как вы закончили замену всего, объедините жетоны назад. Результатом должен быть хорошо сформированный объект JSON.

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

Извините, я не думаю, что есть более простой ответ, за исключением того, что вы можете посмотреть в генераторы парсера (см. Yacc equivalent for Java). На самом деле я на самом деле не смотрел на Java, поэтому я не знаю, как просто их использовать. Пожалуйста, не пытайтесь решить все это с помощью регулярных выражений. (Regexes будет полезно для разбиения строки на токены, но попытка сделать больше, чем с регулярными выражениями, скорее всего, не приведет к мигрени.)

0

Я думаю, что это не объект json. Объект json должен быть таким.

Пример:

JSONObject obj = new JSONObject(); 
obj.put("a", "b"); 
obj.put("name", "your name"); 

Выход: { "а": "б", "имя": "Ваше имя"}

переходящие в JavaScript

var obj = '{"a": "b", "name":"your name"}', 
var json = JSON.parse(obj); 
+0

Я не подумайте, что вы поняли вопрос. – ajb