mhunst
Goto Top

JSON zu BSON

Huhu,

ich hoffe das meine Frage hier halbwegs richtig ist.

Zur Aufgabe steht die Konfiguration eines "WebdynEasy W M-Bus 868MHz" mittels .bson Dateien.

Die entsprechende Konfiguration im .json Format habe ich soweit erstellt, aber wie bekomme ich jetzt aus einer .json eine .bson Datei?
Da muss es doch irgendwo ein entsprechendes Tool geben, jedoch finde ich einfach nichts ...

Eventuell hat ja von Euch jemand eine Idee.

LG Michael face-smile

Content-ID: 1987834861

Url: https://administrator.de/contentid/1987834861

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

1915348599
1915348599 23.02.2022 aktualisiert um 14:48:09 Uhr
Goto Top
mhunst
mhunst 23.02.2022 um 16:16:10 Uhr
Goto Top
Vielen Dank face-smile

Diese Seiten habe ich auch gefunden, allerdings scheine ich zu blöd für die Anwendung ... jedefalls bekomme ich es nicht hin eine .bson zu generieren.
1915348599
1915348599 23.02.2022 aktualisiert um 16:22:17 Uhr
Goto Top
Eine Datei auswählen bekommst du nicht hin ??? Dann ist Hopfen und Malz verloren 😉.
mhunst
mhunst 24.02.2022 um 07:32:59 Uhr
Goto Top
Schon selber probiert? Bei mir gibt es keinen Browser, der auch nur den Hauch einer Reaktion bei der Bedienung des Formulars zeigt face-wink
1915348599
1915348599 24.02.2022 aktualisiert um 07:49:31 Uhr
Goto Top
Zitat von @mhunst:

Schon selber probiert? Bei mir gibt es keinen Browser, der auch nur den Hauch einer Reaktion bei der Bedienung des Formulars zeigt face-wink

Jup, geht hier problemlos. Aber oben findest du ja hunderte Datenschutz freundlichere Alternativen, verstehe ehrlich gesagt dein Problem nicht ... Bist du einfach nur zu faul oder was hindert dich daran diese zu nutzen?! Hinsetzen lesen, nötigen Background anlesen und machen...as simple as that.
Von selbst backen sich deine Brötchen auch nicht.
mhunst
mhunst 24.02.2022 um 09:22:34 Uhr
Goto Top
Ich kann mir ehrlich gesagt nicht vorstellen, dass das Script bei Dir funktioniert :D

Meine Hoffnung war, dass jemand ein leicht zu verwendendes Tool kennt.
Es war nie meine Absicht mich mehrere Stunden mit dieser Thematik zu beschäftigen, vermutlich sogar noch selber was zu scripten, wobei auch noch vorab entsprechende Voraussetzungen geschaffen werden müssen.
Und nein ... dafür bin ich nicht zu faul, dafür fehlt mir schlicht die Zeit.

Na ja, trotzdem vielen Dank.
colinardo
Lösung colinardo 24.02.2022 aktualisiert um 14:29:43 Uhr
Goto Top
Servus Michael,
mit folgendem Powershell-Skript (zur Info das Skript lädt eine DLL von nuget.org für den Konvertierungsvorgang ins Skriptverzeichnis)
param(
    [parameter(mandatory=$true)]$json,
    [parameter(mandatory=$true)]$bson
)
function ConvertJsonTo-Bson {
    param(
        [string]$json
    )
    function Load-NugetAssembly {
        [CmdletBinding()]
        param(
            [string]$url,
            [string]$name,
            [string]$zipinternalpath,
            [switch]$downloadonly
        )
        # Accept all TLS protocols
        [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType]) 
        if($psscriptroot -ne ''){  
            $localpath = join-path $psscriptroot $name
        }else{
            $localpath = join-path $env:TEMP $name
        }
        $tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"  
        $zip = $null
        try{
            if(!(Test-Path $localpath)){
                Add-Type -A System.IO.Compression.FileSystem
                write-host "Downloading and extracting required library '$name' ... " -F Green -NoNewline  
                (New-Object System.Net.WebClient).DownloadFile($url, $tmp)
                $zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
                $zip.Entries | ?{$_.Fullname -eq $zipinternalpath} | %{
                    [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
                }
	            Unblock-File -Path $localpath
                write-host "OK" -F Green  
            }
            if(!$downloadonly.IsPresent){
                Add-Type -Path $localpath -EA Stop
            }
        
        }catch{
            throw "Error: $($_.Exception.Message)"  
        }finally{
            if ($zip){$zip.Dispose()}
            if(Test-Path $tmp){del $tmp -Force -EA 0}
        }  
    }
    Load-NugetAssembly 'https://www.nuget.org/api/v2/package/Newtonsoft.Json/13.0.1' -name 'Newtonsoft.Json.dll' -zipinternalpath 'lib/net45/Newtonsoft.Json.dll' -EA Stop  
        
    $reader = $null;$ms = $null;$bsonwriter = $null
    try{
        $reader = [Newtonsoft.Json.JsonTextReader]::new([System.IO.StringReader]::new($json))
        $data = [Newtonsoft.Json.JsonSerializer]::new().Deserialize($reader)
        $ms = [System.IO.MemoryStream]::new()
        $bsonwriter = [Newtonsoft.Json.Bson.BsonWriter]::new($ms)
        [Newtonsoft.Json.JsonSerializer]::new().Serialize($bsonwriter,$data)
        $ms.ToArray()
    }catch{
        write-host $_.Exception.Message -F Red
    }finally{
        if ($bsonwriter){$bsonwriter.Close();$bsonwriter.Dispose()}
        if ($ms){$ms.Close();$ms.Dispose()}
        if ($reader){$reader.Close();$reader.Dispose()}
    }
}
# convert to bson file
[io.File]::WriteAllBytes($bson,(ConvertJsonTo-Bson -json (gc $json -raw)))
so aus einer CMD heraus so ausgeführt (Quell- und Zielpfade anpassen)
powershell -ep bypass -file .\script.ps1 -json "D:\Quelle\test.json" -bson "D:\Ziel\test.bson"  
oder direkt in einer Powershell-Konsole so ausgeführt
.\script.ps1 -json "D:\Quelle\test.json" -bson "D:\Ziel\test.bson"  
bekommst du dein bson File aus einer json face-smile.


Habe dir auch noch eine kleine Konsolenanwendung (.NET 4.5) mit c# geschrieben, die macht es noch einfacher in der Anwendung:

json_to_bson_1987834861.zip

Benutzung fällt auf der Konsole dann so aus
json_to_bson.exe -json [JSON Source-Path] -bson [BSON Destination-Path]

Grüße Uwe
mhunst
mhunst 24.02.2022 um 12:51:27 Uhr
Goto Top
Hallo Uwe,

damit hätte ich ja nicht mehr gerechnet ... vielen Dank für Deine Mühe, das funktioniert perfekt!

LG Michael face-smile
colinardo
colinardo 24.02.2022 um 13:41:10 Uhr
Goto Top
Immer gerne 👍