Analizar una subcadena como JSON usando QJsonDocument

Tengo una cadena quecontiene (noes) Datos codificados en JSON, como en este ejemplo:

foo([1, 2, 3], "some more stuff")
    |        |
  start     end   (of JSON-encoded data)

El lenguaje completo que utilizamos en nuestra aplicación anida los datos codificados en JSON, mientras que el resto del lenguaje es trivial (solo cosas recursivas). Al analizar cadenas como esta de izquierda a derecha en un analizador recursivo, sé que cuando encuentro un valor codificado en JSON, como aquí[1, 2, 3] comenzando en el índice 4. Después de analizar esta subcadena, necesito saber la posición final para continuar analizando el resto de la cadena.

Me gustaría pasar esta subcadena a un analizador JSON bien probado comoQJsonDocument en Qt5. Pero como leyendola documentación, no hay posibilidad de analizar solo una subcadena como JSON, lo que significa que tan pronto como finalizan los datos analizados (después de consumir la] aquí) el control devuelve sin informar un error de análisis. Además, necesito saber la posición final para continuar analizando mis propias cosas (aquí la cadena restante es, "some more stuff")).

Para hacer esto, solía usar un analizador JSON personalizado que toma la posición actual por referencia y lo actualiza después de finalizar el análisis. Pero como es una parte crítica de la seguridad de una aplicación de negocios, ya no queremos quedarnos con mi analizador hecho a mano. Quiero decir que hayQJsonDocument, entonces por qué no usarlo. (Ya usamos Qt5).

Como una alternativa, estoy pensando en este enfoque:

DejarQJsonDocument analizar la subcadena a partir de la posición actual (que no es JSON válido)El error informa de un carácter inesperado, esta es una posición más allá del JSONDejarQJsonDocument volver a analizar, pero esta vez la subcadena con la posición final correcta

Una segunda idea es escribir un "escáner final JSON" que tome toda la cadena, una posición inicial y devuelva la posición final de los datos codificados en JSON. Esto también requiere un análisis, ya que los paréntesis / paréntesis no coincidentes pueden aparecer en valores de cadena, pero debería ser mucho más fácil (y más seguro) escribir (y usar) una clase de este tipo en comparación con un analizador JSON completamente hecho a mano.

¿Alguien tiene una idea mejor?

Respuestas a la pregunta(1)

Su respuesta a la pregunta