使用终端从两个嵌入式JSON数组成对组合信息

时间:2016-02-23 02:08:00

标签: json jq

我有一个像这样的json文件:

{"offset":0,"results":[{"actividades/_text":["Ciencias Naturales Logro y Autoevaluación","Ciencias Naturales Seres Vivos - Objetos Inertes","Educación Artística Contenidos","Educación Religiosa Dibujo","Educación Religiosa Estructura 1 Periodo","Educación Religiosa Comunicado","Educación Religiosa Respuesta Eucaristía","Educación Religiosa Eucaristía","Expresión Corporal Estructura General","Expresión Corporal Vestuario de Ensayo","Ingles Recomendaciones Generales 2016","Ingles Temas Logros Indicadores Todos los Periodos","Ingles Rules and oral expressions to be used in the classroom","Lengua Castellana Estructura Curricular","Matemáticas Temas Logros 1 Periodo","Matemáticas Taller #1","Música Estructura 1 Periodo","Tecnología e Informática Support guide first term"],"actividades/_source":["/ArchivosCargados/2016/CUADRO-PRIMER-BIMESTRE-2016-PRIMERO.pdf","/ArchivosCargados/2016/Hojita-Seres-Vivos.pdf","/ArchivosCargados/2016/2016-CONTENIDOS-ARTES-PLASTICAS-PRIMARIA-J-T-12345.pdf","/ArchivosCargados/2016/PRIMERO-RELILGION.pdf","/ArchivosCargados/2016/Estructura-RELGION.pdf","/ArchivosCargados/2016/PRIMERO-RELIGION.pdf","/ArchivosCargados/2016/RESPUESTAS-EUCARISTIA.pdf","/ArchivosCargados/2016/respuestas-misa.pdf","/ArchivosCargados/2016/Estructura-general-grado-primero-2016.pdf","/ArchivosCargados/2016/VESTUARIO-CLASE-EXPRESION-CORPORAL-2016.pdf","/ArchivosCargados/2016/RECOMENDACIONES-GENERALES-2016.pdf","/ArchivosCargados/2016/TEMAS-LOGRO-INDICADORES-PERIODO.pdf","/ArchivosCargados/2016/ENGLISH-USED-IN-CLASS.pdf","/ArchivosCargados/2016/lc-1.pdf","/ArchivosCargados/2016/Temas-logros.pdf","/ArchivosCargados/2016/Taller1-16.pdf","/ArchivosCargados/2016/PROGRAMA-PLATAFORMA.pdf","/ArchivosCargados/2016/first-grade.pdf"],"actividades":["http://www.domain.com/ArchivosCargados/2016/CUADRO-PRIMER-BIMESTRE-2016-PRIMERO.pdf","http://www.domain.com/ArchivosCargados/2016/Hojita-Seres-Vivos.pdf","http://www.domain.com/ArchivosCargados/2016/2016-CONTENIDOS-ARTES-PLASTICAS-PRIMARIA-J-T-12345.pdf","http://www.domain.com/ArchivosCargados/2016/PRIMERO-RELILGION.pdf","http://www.domain.com/ArchivosCargados/2016/Estructura-RELGION.pdf","http://www.domain.com/ArchivosCargados/2016/PRIMERO-RELIGION.pdf","http://www.domain.com/ArchivosCargados/2016/RESPUESTAS-EUCARISTIA.pdf","http://www.domain.com/ArchivosCargados/2016/respuestas-misa.pdf","http://www.domain.com/ArchivosCargados/2016/Estructura-general-grado-primero-2016.pdf","http://www.domain.com/ArchivosCargados/2016/VESTUARIO-CLASE-EXPRESION-CORPORAL-2016.pdf","http://www.domain.com/ArchivosCargados/2016/RECOMENDACIONES-GENERALES-2016.pdf","http://www.domain.com/ArchivosCargados/2016/TEMAS-LOGRO-INDICADORES-PERIODO.pdf","http://www.domain.com/ArchivosCargados/2016/ENGLISH-USED-IN-CLASS.pdf","http://www.domain.com/ArchivosCargados/2016/lc-1.pdf","http://www.domain.com/ArchivosCargados/2016/Temas-logros.pdf","http://www.domain.com/ArchivosCargados/2016/Taller1-16.pdf","http://www.domain.com/ArchivosCargados/2016/PROGRAMA-PLATAFORMA.pdf","http://www.domain.com/ArchivosCargados/2016/first-grade.pdf"]}],"cookies":["ASP.NET_SessionId=\"0vy5tp45alrfik55q3bs24mr\";Path=\"/\";Domain=\"www.domain.com\";Port=\"80\""],"connectorVersionGuid":"e35c3b39-301e-4474-b75e-5473963b1852","connectorGuid":"b0fe3dd7-fd92-472b-b197-14d86f91c5fb","pageUrl":"http://www.domain.com/principal.aspx?tbindex=3&tab_codigo=33","outputProperties":[{"name":"actividades","type":"URL"}]}

基本上,我有三个对象:actividades,actividades / _text和actividades / _source。我想创建一个最终的json文件,它有一对actividades和actividades / _text,顺序与文件中出现的顺序相同,我的意思是,例如:

"Ciencias Naturales Logro y Autoevaluación":"http://www.domain.com/ArchivosCargados/2016/CUADRO-PRIMER-BIMESTRE-2016-PRIMERO.pdf"

我想使用linux终端这样做,如果我必须安装一些实用程序并不重要。我试着用jq没有成功:

jq '.actividades + .actividades/_text' test.json 

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

关键是transpose过滤器。以下内容:

.results[0] | [ ."actividades/_text", .actividades ] | transpose

产生如下的对:

[
  "Ciencias Naturales Logro y Autoevaluación",
  "http://www.domain.com/ArchivosCargados/2016/CUADRO-PRIMER-BIMESTRE-2016-PRIMERO.pdf"
]

要将这些对组合成一个对象,请点击:

| map({ (.[0]):.[1]} ) | add

要生成“X”形式的输出:“Y”,如您所示,您可以使用以下调用:

jq -r  '.results[0]
| [ ."actividades/_text", .actividades ]
| transpose[]
| "\"\(.[0])\":\"\(.[1])\"" '

根据您的输入,这最后产生:

"Ciencias Naturales Logro y Autoevaluación":"http://www.domain.com/ArchivosCargados/2016/CUADRO-PRIMER-BIMESTRE-2016-PRIMERO.pdf"
"Ciencias Naturales Seres Vivos - Objetos Inertes":"http://www.domain.com/ArchivosCargados/2016/Hojita-Seres-Vivos.pdf"
....
....