如何在没有未知密钥的情况下访问Json数据?

2023-12-08

public static string RESTToJsonConverter(string incoming_data){
    string data = "[";
    int i = 0;
    Debug.Log("incoming_data"+incoming_data);
    data += "]";
    string JSONToParse = "{\"values\":" + data + "}";
    return JSONToParse;
}

下面是我运行该代码时的结果。我的问题是如何在不获取数据的情况下访问/获取所有数据"M4qRmfIqhKdy643Ujye"密钥(自动生成)?

如果使用 JavaScript,我可以使用object.values但由于我使用的是 C#,所以我不知道如何获取数据。

{
    "-M4qRmfIqhKdy643Ujye": {
        "assetName": "avatar",
        "id": "-M4qRmfnFya7bC43Ujye",
        "imageName": "icon_avatar",
        "name": "Bob",
        "objName": "Bobby",
        "point": "-M4vZRY9vhKs65n5L_Gk",
        "versionNumber": "3"
    },
    "-M4qRmfIqhKdy643Ujye": {
        "assetName": "avatar",
        "id": "-M4qRmfnFya7bC43Ujye",
        "imageName": "icon_avatar",
        "name": "Bobfds",
        "objName": "Bobbydsf",
        "point": "-M4vZRY9vhKs65n5L_Gk",
        "versionNumber": "3"
    },
    "-M4qRmfIqhKdy643Ujye": {
        "assetName": "avatar",
        "id": "-M4qRmfnFya7bC43Ujye",
        "imageName": "icon_avatar",
        "name": "Bobfdsa",
        "objName": "Bobbyfc",
        "point": "-M4vZRY9vhKs65n5L_Gk",
        "versionNumber": "3"
    }

}

UPDATE

这是我的下载器类中的功能之一

IEnumerator DownloadData(string dataPath, Action<string> callback){
    Debug.Log("dataPath=>"+dataPath);
    var token = LocalData.getAuth();
    Auth data = JsonUtility.FromJson<Auth>(token);
    var request = new 
    UnityWebRequest("https://test123.firebaseio.com/"+dataPath+".json? 
    auth="+data.idToken, "GET");
    request.downloadHandler = (DownloadHandler) new 
    DownloadHandlerBuffer();
    request.SetRequestHeader("Content-Type", "application/json");

    yield return request.SendWebRequest();

    if (request.isHttpError || request.isNetworkError)
    {
        Debug.Log(request.error);
        NotificationHelper.showOnePopup("Error \n"+request.error);
        callback(null);
    }
    else
    {
        //Debug.Log(request.downloadHandler.text);
        string json = 
        FirebaseSetup.RESTToJsonConverter(request.downloadHandler.text);
        callback(json);
    }

下面是我的 FirebaseSetup 类

public static string FirebaseToJsonConverter(DataSnapshot snapshot){
    string data = "[";
    int i = 0;
    foreach(DataSnapshot s in snapshot.Children){
        data += s.GetRawJsonValue();
        i++;
        if(i != snapshot.ChildrenCount)
            data += ",";
    }
    data += "]";
    string JSONToParse = "{\"values\":" + data + "}";
    return JSONToParse;
}

public static string RESTToJsonConverter(string incoming_data)
{
    Debug.Log($"incoming_data:/n{incoming_data}");

    // remove everything before the SECOND occurrence of '{'
    // remove last occurrence of '}'
    var startIndex = incoming_data.IndexOf('{', incoming_data.IndexOf('{') + 1);
    var endIndex = incoming_data.LastIndexOf('}') - 1;
    var json = incoming_data.Substring(startIndex, endIndex - startIndex);

    // then remove leading or trailing whitespace
    json = json.Trim();
    
    Debug.Log($"json:/n{json}");

    var data = JsonUtility.FromJson<string>(json);

    return data;
}

在我尝试 @derHugo 代码后,我收到新错误。

这是我的新错误


对于您的具体情况,我会采取相反的方式:

根字段名称通常并不重要,因此如果删除尾随}并从以下位置开始字符串second {你将会拥有

{
    "assetName": "avatar",
    "id": "-M4qRmfnFya7bC43Ujye",
    "imageName": "icon_avatar",
    "name": "Bob",
    "objName": "Bobby",
    "point": "-M4vZRY9vhKs65n5L_Gk",
    "versionNumber": "3"
}

你可以简单地为其创建一个 C# 类

[Serializable]
public class Data
{
    public string assetName;
    public string id;
    public string imageName;
    public string name;
    public string objName;
    public string point;
    public string versionNumber;
}

然后你可以使用JsonUtility

public static Data RESTToJsonConverter(string incoming_data)
{
    Debug.Log($"incoming_data:/n{incoming_data}");

    // remove everything before the SECOND occurrence of '{'
    // remove last occurrence of '}'
    var startIndex = incoming_data.IndexOf('{', incoming_data.IndexOf('{') + 1);
    var endIndex = incoming_data.LastIndexOf('}') - 1;
    var json = incoming_data.Substring(startIndex, endIndex - startIndex);

    // then remove leading or trailing whitespace
    json = json.Trim();
    
    Debug.Log($"json:/n{json}");
   
    var data = JsonUtility.FromJson<Data>(json);

    return data;
}

Update

您现在更新了问题内容,​​因此现在数据以数据对象字典的形式出现。

在这种情况下你可以使用牛顿软件Json.NET它直接支持(反)序列化Dictionary就像例如

[Serializable]
public class Data
{
    public string assetName;
    public string id;
    public string imageName;
    public string name;
    public string objName;
    public string point;
    public string versionNumber;
}

然后做类似的事情

public static Dictionary<string, Data> RESTToJsonConverter(string incoming_data)
{
    Debug.Log($"incoming_data:/n{incoming_data}");
   
    var data = JsonConvert.DeserializeObject<Dictionary<string, Data>(json);

    return data;
}

那么你可以做例如

var datas = RESTToJsonConverter(receivedRawData);
foreach(var data in data.Values)
{
    Debug.Log(data.id);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有未知密钥的情况下访问Json数据? 的相关文章

  • 如何获取枚举数作为常量?

    From 枚举中定义的项目总数 https stackoverflow com questions 856154 total number of items defined in an enum 我发现我可以使用以下方法获取枚举数 Enum
  • MVVM:来自 FileOpenPicker 的图像绑定源

    我将 OnActivated 添加到 app xaml cs 中 它可以正常工作 protected async override void OnActivated IActivatedEventArgs args var continua
  • 如何配置 Ninject 来注入 NodaTime IClock

    在我的 NinjectConfigurator 中我有 container Bind
  • 如何在 ASP.NET MVC 中处理会话数据

    假设我想存储一个名为language id在会议中 我想我也许可以做如下的事情 public class CountryController Controller WebMethod EnableSession true AcceptVer
  • 使用c#在mac上启动外部进程

    我成功地使用 System Diagnostics Process Start 在 Windows 上启动我的外部单声道可执行文件 然而在mac上却失败了 我没有收到任何错误 只是什么也没发生 我尝试按以下方式进行操作 System Dia
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988
  • 如何在 Windows 上的 GCC 中链接 CS50 C 库

    我是 编程新手 一直在尝试使用以下命令编译我的代码MinGW https en wikipedia org wiki MinGW GCC 但我尝试包括CS50 https en wikipedia org wiki CS50 cs50 c
  • 为什么 xcode IDE 认为 `friend` 是保留字

    我一直在开发一个个人项目 并在我创建的新类中包含以下代码 property readonly getter isFriend BOOL friend 它似乎没有任何问题 当我构建它时 它可以编译得很好 但是当我们在xcode IDE看起来像
  • 我应该使用字节还是int?

    我记得曾在某处读到 即使您只需要字节 使用 Int32 更好 就性能而言 它 据说 仅适用于您不关心存储的情况 这是有效的吗 例如 我需要一个保存一周中某一天的变量 我是吗 int dayOfWeek or byte dayOfWeek E
  • 如何查看每秒更新的图表中的最后 10 个数据点?

    我有这个代码 private void timer Tick object sender EventArgs e timer Stop for int i 0 i lt TOTAL SENSORS i DateTime d DateTime
  • 大小为 k 的非连续子序列的最大值的最小值

    在开始之前 我希望这个问题不是重复的 我发现了几个类似的问题 但它们似乎都没有描述完全相同的问题 但如果它是重复的 我会很高兴看到一个解决方案 即使它与我的算法不同 我一直在尝试回答这个问题 https stackoverflow com
  • Qt 多重继承和信号

    由于 QObject 我在 QT 中遇到了有关多重继承的问题 我知道很多人也有同样的问题 但我不知道该如何解决 class NavigatableItem public QObject Q OBJECT signals void desel
  • 现代编译器的 C++ 中“memset”功能的状态

    Context 不久前 我偶然发现了 Alexandrescu 在 2001 年发表的 DDJ 文章 http www ddj com cpp 184403799 http www ddj com cpp 184403799 它是关于比较将
  • Polymer core-ajax 不会发布 JSON?

    我正在使用 core ajax 来检索 JSON 数据 将组件翻转为 JSON 格式回传到服务器则完全是另一回事 在所有情况下 无论传入的 contentType 或 handleAs 参数如何 作为输入传入的 JSON 对象似乎都会被转换
  • 如何通过分解 y 轴来减小 mschart 的高度

    如何降低 mschart 的高度 如下所示 编辑 就我而言 我不想查看中断图表 this chart1 ChartAreas 0 AxisY ScaleBreakStyle Enabled false 您似乎正在寻找AxisY ScaleB
  • Qt - 添加超链接到对话框

    有没有办法在 Qt 对话框中添加可点击的超链接 IE 它应该看起来像一个超链接 蓝色文本 当您单击它时 它应该在浏览器中打开该超链接 像这样的东西 Use QLabel setOpenExternalLinks bool 并在标签上设置文本
  • Microsoft Visual Studio 2017 中的 wxWidgets 设置

    我花了大约 20 个小时试图弄清楚如何在 Microsoft Visual Studio 2017 中设置 wxWidgets 我遵循 https wiki wxwidgets org Microsoft Visual C 2B 2B Gu
  • C 中的 2 个字符要短

    我有2个字符 Char 128和查尔2 如何将这些字符转为 Short640 in C 我试过了 unsigned short getShort unsigned char array int offset short returnVal
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest

随机推荐