-1
votes

Comment écrire une fonction de mappage qui prend une chaîne de charge utile JSON et une autre chaîne de mappages et renvoie une chaîne de données mappées

Je veux écrire une fonction de mappage qui prend une chaîne de charge utile JSON et une autre chaîne de mappages et renvoie une chaîne de données mappées. Par exemple, une charge utile de: xxx

et une carte de: xxx

devrait revenir: xxx


4 commentaires

Votre carte contiendrait une quantité arbitraire de propriétés?


Utilisez un SerisiAizer JSON (comme JSON.NET), analyser le JSON (une fois que vous le faites valide JSON, comme votre échantillon n'est pas) et traverser le résultat analysé pour collecter les données qui vous intéressent. Comme il se trouve, votre question est trop large.


D'où viendrait votre carte, cela serait également un objet JSON, ou un objet anonyme, ou une classe de POCO à partir de laquelle vous alliez lire les propriétés disponibles?


Désolé pourquoi je suis confus et posé ici, je n'ai pas plus de contexte à ce sujet, je n'ai besoin que de la fonction de mappage que la chaîne de la charge utile JSON et de la remettre à deux valeur comme "Test_Name": "Bonjour", "Test_value": " "}


3 Réponses :


0
votes

Il serait plus facile si vous gardez les JPATHS dans le mappage JSON.

Vous pouvez charger Orignal JSON dans JOWJECT1. Vous pouvez charger JSON JSON à JOWJECT2.

La boucle comme ci-dessous devrait vous aider à obtenir la réalité

Essaye - Je suppose que votre carte JSON contiendra une carte de seul objet et votre JSON originale serait contiennent une gamme d'éléments. xxx


0 commentaires

1
votes

Eh bien, vous seriez comme des commentaires suggéré devraient convertir le JSON dans une structure utilisable, une bibliothèque commune utilisée pour cela serait Newtonsoft.json disponible sur Nuget, et vous pourriez ensuite analyser votre entrée comme de la manière suivante

using System;
using System.Linq;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class Program
{
    private static IDictionary<string,object> MapData( JObject source, IDictionary<string,string> map ) {
        var result = new Dictionary<string, object>();
        foreach (var kvp in map) {
            result.Add( kvp.Key, source.SelectToken( kvp.Value ).Value<object>() );
        }
        return result;
    }

    public static void Main()
    {
        string jsonContent = @"{
    ""Name"" : ""Hello"",
    ""This"" : {
        ""That"" : {
            ""TheOther"" : ""There""
        }
    }
}";
        string jsonMap = @"{
    ""Test_Name"" : ""Name"",
    ""Test_Value"": ""This.That.TheOther""
 }";
        var sourceObject = JsonConvert.DeserializeObject<JObject>( jsonContent );
        var sourceMap = JsonConvert.DeserializeObject<IDictionary<string, string>>( jsonMap );

        var result = MapData( sourceObject, sourceMap );
        foreach (var kvp in result) {
            Console.WriteLine( "{0}: {1}", kvp.Key, kvp.Value );
        }
    }
}


1 commentaires

Merci @ Icepickle pour votre aide géniale et ce fut très mauvais dans le contexte de la question que j'essaierai TI demander une question plus connexe. Merci:-)



0
votes

J'ai deviné à la structure JSON pour trouver le prénom. Mais cela est similaire à la façon dont j'essaierais de le faire. Si la structure est un peu différente, faites-le moi savoir et je peux vous aider. XXX


0 commentaires