Подход к реализации зависит от структуры JSON файла. Если структура файла предопределена, то можно использовать для 12-ки такой пример:
X++:
private void fillTmpTable(str _filePath)
{
Newtonsoft.Json.Linq.JObject jObject;
int recCount,
j;
TableId tableIdLocal;
RecId recIdLocal;
DatabaseLogType logTypeLocal;
FieldName fieldName;
Object varObj,
varTitle;
Newtonsoft.Json.Linq.JToken jFileToken,
jRecordToken,
jValuesToken;
System.Collections.IEnumerator IEnumerator;
Newtonsoft.Json.JsonReader jsonReader;
DictField dictField;
#define.values("values")
;
jObject = Newtonsoft.Json.Linq.JObject::Parse(System.IO.File::ReadAllText(_filePath));
recCount = jObject.get_Count();
for (j = 1; j <= recCount; j++)
{
jFileToken = (j == 1) ? jObject.get_First() : jFileToken.get_Next();
IEnumerator = jFileToken.GetEnumerator();
while(IEnumerator.MoveNext())
{
importTable.initValue();
jRecordToken = IEnumerator.get_Current();
tableIdLocal = jRecordToken.get_Item(identifierStr(TableId));
recIdLocal = jRecordToken.get_Item(identifierStr(RecId));
logTypeLocal = jRecordToken.get_Item(identifierStr(LogType));
importTable.RefTableId = tableIdLocal;
importTable.RefRecId = recIdLocal;
importTable.LogType = logTypeLocal;
if (importTable.validateWrite())
{
importTable.insert();
}
else
{
throw error("@SYS62664");
}
if (logTypeLocal == DatabaseLogType::Insert || logTypeLocal == DatabaseLogType::Update)
{
jValuesToken = jRecordToken.get_Item(#values);
for (jValuesToken = jValuesToken.get_First(); jValuesToken; jValuesToken = jValuesToken.get_Next())
{
importLine.initValue();
importLine.RefRecId = importTable.RecId;
jsonReader = jValuesToken.CreateReader();
jsonReader.Read();
varTitle = jsonReader.get_Value();
fieldName = varTitle.ToString();
importLine.RefFieldId = fieldName2id(importTable.RefTableId, fieldName);
dictField = new DictField(importTable.RefTableId, importLine.RefFieldId);
importLine.RefFieldType = dictField.baseType();
jsonReader.Read();
varObj = jsonReader.get_Value();
importLine.Value = varObj.ToString();
if (importLine.validateWrite())
{
importLine.insert();
}
else
{
throw error("@SYS62664");
}
}
}
}
}
}
По сути,
http://www.newtonsoft.com/json/help/...troduction.htm - основной источник информации по взаимодействию.
Альтернативный вариант - парсить строку, где {} границы элемента массива.