Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

json_merge fails on nonempty objects and returns an array for two empty objects

Cerrado Apto para principiantes
#1,248 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
85/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
c
Área
devtools

Línea de trabajo

Comienza por lib/json.eigs:41–51 y el comportamiento de json_decode cubierto en tests/test_json_hard.eigs. Ejecuta las dos reproducciones mediante src/eigenscript y añade cobertura para objetos disjuntos, en conflicto y vacíos. Se considera terminado cuando json_merge devuelve un objeto plano decodificado, la segunda entrada gana los conflictos y todos los casos enumerados pasan.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

area:stdlib bug found-by:code-review

json.json_merge fails on ordinary nonempty JSON objects. When both inputs are empty objects, it silently returns the wrong JSON type: an array.

Reproduce

src/eigenscript -e 'import json
print of (json.json_merge of ["{\"a\":1}", "{\"b\":2}"])'

Actual: exit 1, Error line 48: cannot index dict, at append of [merged, obj_a[i]].

Expected: a JSON object containing a: 1 and b: 2.

The empty-input case also fails the contract:

src/eigenscript -e 'import json
print of (json.json_merge of ["{}", "{}"])'

Actual: [] (exit 0). Expected: {}.

Cause and coverage

lib/json.eigs:41–51 documents an object merge in which the second object overwrites matching keys, but initializes merged as a list and integer-indexes the decoded objects. json_decode returns dictionaries for objects; that behavior is already tested. The library API promises to merge two objects.

No existing test calls the library's json_merge. Add coverage for disjoint keys, conflicting keys with the second input winning, either side empty, and both sides empty. Compare decoded objects so serialization whitespace or key ordering is not the oracle. Deep-merge semantics are outside this defect; the implementation explicitly promises a flat merge.

Confirmed with a fresh default release build of b91768e23c5a874a64e76e4af9ab291e6aa49983, with inherited EIGS_* variables removed.

Lenguaje dominante
C
Estrellas
3
Forks
7
Merge medio
4 h 5 min
PR fusionados (30 d)
116

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de InauguralSystems/EigenScript

Todos los issues de InauguralSystems/EigenScript

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.