this may not be your case, but maybe you can use the cycle.js
, with it you can point to an object reference, and not object in yes.
This blibioteca can also be useful if you want to make a JSON.stringify
in a circular referenced object.
var pessoas = [
//pessoas[0]: "$ref": "$[0]"
{
"ID": 1,
"Nome": "Teste 01",
"Conjugue": { "$ref": "$[1]" },
"Pai": null,
"Mae": null,
"Filhos": [{ "$ref": "$[2]" }, { "$ref": "$[3]" }, { "$ref": "$[4]" } ],
"Irmaos": null
},
//pessoas[1]: "$ref": "$[1]"
{
"ID": 2,
"Nome": "Teste 02",
"Conjugue": { "$ref": "$[0]" },
"Pai": null,
"Mae": null,
"Filhos": [{ "$ref": "$[2]" }, { "$ref": "$[3]" }, { "$ref": "$[4]" } ],
"Irmaos": null
},
//pessoas[2]: "$ref": "$[2]"
{
"ID": 3,
"Nome": "Teste 03",
"Conjugue": null,
"Pai": { "$ref": "$[0]" },
"Mae": { "$ref": "$[1]" },
"Filhos": null,
"Irmaos": [{ "$ref": "$[3]" }, { "$ref": "$[4]" }]
},
//pessoas[3]: "$ref": "$[3]"
{
"ID": 4,
"Nome": "Teste 04",
"Conjugue": null,
"Pai": { "$ref": "$[0]" },
"Mae": { "$ref": "$[1]" },
"Filhos": null,
"Irmaos": [{ "$ref": "$[2]" }, { "$ref": "$[4]" }]
},
//pessoas[4]: "$ref": "$[4]"
{
"ID": 5,
"Nome": "Teste 05",
"Conjugue": null,
"Pai": { "$ref": "$[0]" },
"Mae": { "$ref": "$[1]" },
"Filhos": null,
"Irmaos": [{ "$ref": "$[2]" }, { "$ref": "$[3]" }]
}
];
var _pessoas = JSON.retrocycle(pessoas);
console.log(_pessoas);
console.log(JSON.stringify(JSON.decycle(_pessoas)));
<script src="https://cdn.rawgit.com/douglascrockford/JSON-js/master/cycle.js"></script>
some server-side blibiotecas, such as the Newtonsoft.Json for C#
use a similar approach to solve circular reference problems, but in this case the $ref
does not point to the Path of the object, but to the object with the property $id
of the same value.
in any case, you can adapt the script of the Douglas Crockfords to work in the same way.
in this case the received json would be something similar to:
using System;
using Newtonsoft.Json;
public class Pessoa
{
public int ID { get; set; }
public string Nome { get; set; }
public Pessoa Conjugue { get; set; }
public Pessoa Pai { get; set; }
public Pessoa Mae { get; set; }
public Pessoa[] Filhos { get; set; }
public Pessoa[] Irmaos { get; set; }
}
public class Program
{
public static void Main()
{
var pessoas = new Pessoa[5];
pessoas[0] = new Pessoa() { ID= 1, Nome = "Teste 01" };
pessoas[1] = new Pessoa() { ID= 2, Nome = "Teste 02" };
pessoas[2] = new Pessoa() { ID= 3, Nome = "Teste 03" };
pessoas[3] = new Pessoa() { ID= 4, Nome = "Teste 04" };
pessoas[4] = new Pessoa() { ID= 5, Nome = "Teste 05" };
pessoas[0].Conjugue = pessoas[1];
pessoas[0].Filhos = new Pessoa[] { pessoas[2], pessoas[3], pessoas[4] };
pessoas[1].Conjugue = pessoas[0];
pessoas[1].Filhos = new Pessoa[] { pessoas[2], pessoas[3], pessoas[4] };
pessoas[2].Pai = pessoas[0];
pessoas[2].Mae = pessoas[1];
pessoas[2].Irmaos = new Pessoa[] { pessoas[3], pessoas[4] };
pessoas[3].Pai = pessoas[0];
pessoas[3].Mae = pessoas[1];
pessoas[3].Irmaos = new Pessoa[] { pessoas[2], pessoas[4] };
pessoas[4].Pai = pessoas[0];
pessoas[4].Mae = pessoas[1];
pessoas[4].Irmaos = new Pessoa[] { pessoas[2], pessoas[3] };
var json = JsonConvert.SerializeObject(pessoas, Formatting.Indented, new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
});
Console.WriteLine(json);
/*
[
//pessoas[0]: "$ref": "1"
{
"ID": 1,
"Nome": "Teste 01",
"Conjugue": { "$ref": "2" },
"Pai": null,
"Mae": null,
"Filhos": [{ "$ref": "3" }, { "$ref": "4" }, { "$ref": "5" } ],
"Irmaos": null
},
//pessoas[1]: "$ref": "2"
{
"ID": 2,
"Nome": "Teste 02",
"Conjugue": { "$ref": "1" },
"Pai": null,
"Mae": null,
"Filhos": [{ "$ref": "3" }, { "$ref": "4" }, { "$ref": "5" } ],
"Irmaos": null
},
//pessoas[2]: "$ref": "3"
{
"ID": 3,
"Nome": "Teste 03",
"Conjugue": null,
"Pai": { "$ref": "1" },
"Mae": { "$ref": "2" },
"Filhos": null,
"Irmaos": [{ "$ref": "4" }, { "$ref": "5" }]
},
//pessoas[3]: "$ref": "4"
{
"ID": 4,
"Nome": "Teste 04",
"Conjugue": null,
"Pai": { "$ref": "1" },
"Mae": { "$ref": "2" },
"Filhos": null,
"Irmaos": [{ "$ref": "3" }, { "$ref": "5" }]
},
//pessoas[4]: "$ref": "5"
{
"ID": 5,
"Nome": "Teste 05",
"Conjugue": null,
"Pai": { "$ref": "1" },
"Mae": { "$ref": "2" },
"Filhos": null,
"Irmaos": [{ "$ref": "3" }, { "$ref": "4" }]
}
];
*/
}
}
What do you mean "store in another object"? To isolate that object you can use objTeste[0].
– Sergio
That the new object receives only the objTeste[0] more has to check if he has kin, because this object may be the father of another in the future then I have to organize it again, bringing only the son and his relatives.
– Carlos Nascimento
I still don’t quite understand your doubt, the way you store it is no longer saving the parents inside the children?
– LF Ziron
Explain better the idea you have of relatives and children to be clearer. Without it seems to me that this is enough:
var novoObjeto = objTeste[0];
– Sergio
I want to ignore the relatives objects outside the child, bringing them in the child object. I have to make this organization using a for??
– Carlos Nascimento